Java processbuilder.start (), занимающегося значительно дольше, чем выполнение в терминалеJAVA

Программисты JAVA общаются здесь
Anonymous
Java processbuilder.start (), занимающегося значительно дольше, чем выполнение в терминале

Сообщение Anonymous »

У меня есть графический интерфейс, который запускает новую ветку (

Код: Выделить всё

getFilesThread
) Когда пользователь нажимает кнопку. Этот поток вызывает метод start () экземпляра моего класса clearcaseprocess ниже (моя организация не позволит мне использовать API java java clearcase), и когда процесс (ES) заканчивается, он обновляет графический интерфейс.

Код: Выделить всё

private static class ClearCaseProcess {

private ArrayList stdout = new ArrayList();
private ArrayList stderr = new ArrayList();
private ProcessBuilder pb = null;

public ClearCaseProcess(ArrayList commands, String dir) throws IOException {
pb = new ProcessBuilder(commands);
pb.directory(new File(dir));
}

public void start() throws IOException {
long minStart = System.nanoTime();

Process process = pb.start();

Thread sout = new Thread() {
@Override
public void run() {
BufferedReader out = new BufferedReader(
new InputStreamReader(process.getInputStream()));

String outLine = "";

try {
while ((outLine = out.readLine()) != null) {
stdout.add(outLine);
System.out.println(outLine);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}

};
sout.start();

Thread serr = new Thread() {
@Override
public void run() {
BufferedReader err = new BufferedReader(
new InputStreamReader(process.getErrorStream()));

String errLine = "";

try {
while ((errLine = err.readLine()) != null) {
stderr.add(errLine);
System.err.println(errLine);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
};
serr.start();

try {
process.waitFor();
long execTime = System.nanoTime() - minStart;
System.out.println("Process '" + description + "' took " + execTime);
} catch (InterruptedException ex) {
System.err.println(ex.getMessage());
}
}

}
< /code>

getFiles()
нужно собирать данные из четырех различных clearcaseprocess es. Я планирую запустить их одновременно в четырех темах. Каждый из этих потоков имеет два связанных вспомогательных потока для потребления stdout и stderr , как показано выше. Я предполагаю, что это будет быстрее, чем запуск ClearCase четыре раза последовательно. На данный момент, однако, я тестирую только один вызов Clearcase. Я подозреваю, что мои петли читают stdout и stderr - это виновники, потому что даже мои печатные операторы не спешат производить выход на консоли Netbeans. Как я могу это ускорить?

Подробнее здесь: https://stackoverflow.com/questions/425 ... in-a-termi

Вернуться в «JAVA»