JFrame / JPanel не обновляется во время выполнения процесса - PullRequest
0 голосов
/ 10 февраля 2019

У меня работает 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

...