Я создаю графический интерфейс, на котором выполняется программа, которая запускает тесты и записывает их вывод в виде текста на консоль.Я создал таблицу, которая позволяет пользователю выбирать тесты, которые он хочет запустить, когда пользователь нажимает «выполнить», затем он проходит через таблицу и запускает выбранные тесты и должен записать вывод в textArea.Когда я запускаю программу, textArea не будет обновляться до тех пор, пока не будут выполнены все тесты, но мне нужно обновить ее, поскольку тест выводит текст.
Из того, что я прочитал, мне нужно создать несколько потоков, потому чтоЗапуск программы и запись в textArea - оба процесса.Я не совсем понимаю, как работает Threading, но я попытался использовать StringBuffer, чтобы результаты теста могли быть сохранены и использованы вторым созданным мной потоком.
public void runTest(ArrayList<String> arr) throws InterruptedException{
StringBuffer sb = new StringBuffer();
Thread t = new Thread(() -> {
try {
ProcessBuilder builder = new ProcessBuilder(arr);
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while((line = r.readLine()) != null){
sb.append(line).append("\n");
}
System.out.println(line);
} catch (IOException ex) {
Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
}
});
Thread t2 = new Thread(()->{
String line = sb.toString();
System.out.println(line);
txtOutputArea.appendText(line + "\n");
});
t.start();
t2.start();
t.join();
t2.join();
}
IЯ печатаю текст в консоль, и он работает, но по какой-то причине нет вывода в textArea.