Для Windows popen
также работает, но открывается окно консоли, которое быстро мигает над вашим пользовательским интерфейсом. Если вы хотите быть профессионалом, лучше отключить этот «мигающий» (особенно если конечный пользователь может его отменить).
Итак, вот моя собственная версия для Windows:
(Этот код частично рекомбинирован из идей, написанных в образцах кодекса и MSDN)
//
// Execute a command and get the results. (Only standard output)
//
CStringA ExecCmd(
const wchar_t* cmd // [in] command to execute
)
{
CStringA strResult;
HANDLE hPipeRead, hPipeWrite;
SECURITY_ATTRIBUTES saAttr = { sizeof(SECURITY_ATTRIBUTES) };
saAttr.bInheritHandle = TRUE; //Pipe handles are inherited by child process.
saAttr.lpSecurityDescriptor = NULL;
// Create a pipe to get results from child's stdout.
if ( !CreatePipe(&hPipeRead, &hPipeWrite, &saAttr, 0) )
return strResult;
STARTUPINFO si = { sizeof(STARTUPINFO) };
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.hStdOutput = hPipeWrite;
si.hStdError = hPipeWrite;
si.wShowWindow = SW_HIDE; // Prevents cmd window from flashing. Requires STARTF_USESHOWWINDOW in dwFlags.
PROCESS_INFORMATION pi = { 0 };
BOOL fSuccess = CreateProcessW( NULL, (LPWSTR)cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
if (! fSuccess)
{
CloseHandle( hPipeWrite );
CloseHandle( hPipeRead );
return strResult;
}
bool bProcessEnded = false;
for (; !bProcessEnded ;)
{
// Give some timeslice (50ms), so we won't waste 100% cpu.
bProcessEnded = WaitForSingleObject( pi.hProcess, 50) == WAIT_OBJECT_0;
// Even if process exited - we continue reading, if there is some data available over pipe.
for (;;)
{
char buf[1024];
DWORD dwRead = 0;
DWORD dwAvail = 0;
if (!::PeekNamedPipe(hPipeRead, NULL, 0, NULL, &dwAvail, NULL))
break;
if (!dwAvail) // no data available, return
break;
if (!::ReadFile(hPipeRead, buf, min(sizeof(buf) - 1, dwAvail), &dwRead, NULL) || !dwRead)
// error, the child process might ended
break;
buf[dwRead] = 0;
strResult += buf;
}
} //for
CloseHandle( hPipeWrite );
CloseHandle( hPipeRead );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
return strResult;
} //ExecCmd
плагин JAutodoc для затмения делает точно, в чем Вы нуждаетесь, но с гранулярностью пакета:
щелчок правой кнопкой по пакету, выберите, "Добавьте javadoc для участников...", и скелет будет добавлен.
существуют многочисленные интересные опции: шаблоны для javadoc, добавляя TODO в заголовке каждого высказывания файла: "обработайте javadoc по шаблону, должно быть заполнено...", и т.д.
Я думаю, автоматически генерируя пустой Javadoc, антишаблон и должен препятствоваться; это дает коду появление того, чтобы быть зарегистрированным, но просто добавляет шум к кодовой базе.
я рекомендовал бы вместо этого настроить редактор кода, чтобы помочь на основе на класс и на метод использовать, когда Вы на самом деле пишете javadoc (один комментатор указал на функцию Eclipse, которая делает это).
Если Вы щелкаете правой кнопкой в источнике файла в Eclipse, он имеет опцию поколения Javadoc в соответствии с исходным меню.
Можно настроить затмение для показа предупреждений для вещей, которые испытывают недостаток в javadoc или имеют javadoc, который не имеет всей информации или имеет неправильную информацию. Это может также вставить шаблоны для Вас для заполнения.
Не совсем инструмент, который Вы попросили, но вероятно лучше, потому что Вы не закончите с пустым skeletons на методах, которые Вы пропустили.
можно достигнуть этого путем исследования и редактирования предпочтительной страницы вне Окна пути> Предпочтения> Java> Компилятор> Javadoc для рабочей области. Снимок экрана той предпочтительной страницы ниже:
Для получения дополнительной информации об объектах на этом экране следуйте за ссылкой ниже: