У меня работает Process
(gradew deploy for FRC), и его выходные данные направлены в BufferedReader
и JFrame
(parent
в блоке ниже) для нового окна с JPanel
содержащий JTextArea
(outputArea
).Первоначально у меня был этот метод для обновления текстовой области при чтении вывода из Process
:
public void show(BufferedReader in){
outputArea.setText("");
while(true){
String line = in.readLine();
if(line == null){
break;
}
outputArea.append(line + "\n");
}
parent.setTitle("Deploy Output");
}
Эта реализация показала пустое окно во время работы Process
и обновлялась только довывод после его завершения.
В настоящее время, чтобы попытаться обновить его, у меня есть, где создаются Process
и окно, следующий цикл и следующий метод:
while(!outputWindow.getDone()){ //getDone returns done as set in the subsequent method
outputWindow.show(br); //br = the BufferedReader
outputWindow.repaint();
}
public void show(BufferedReader in){
String line = in.readLine();
if(line == null){
parent.setTitle("Deploy Output");
done = true;
return;
}
outputArea.append(line + "\n");
}
Другие вещи, которые я пробовал, включают использование SwingUtilities.invokeLater()
с repaint
, создание нового потока с repaint
и использование revalidate
вместе с repaint
.В соответствии с небольшой отладкой печати во время каждой итерации цикла while этой версии показано, что он получает выходные данные перед обновлением, но отображает только текст и другие компоненты кадра после завершения Process
.
Anyпомощь будет оценена.
Редактировать (почти забыл) - репозиторий Github для полного проекта находится здесь, где он имеет первую версию метода: Github