Я столкнулся с той же проблемой с моим приложением. У меня была кнопка «Выполнить» моего приложения, которая выполняла некоторые действия и выводила результаты в JTextArea. Я должен был вызвать метод из потока. Вот что я сделал.
У меня есть несколько переключателей действий, которые можно выполнить, и одна кнопка «Выполнить» для выполнения этого конкретного действия. У меня есть действие под названием Validate. Поэтому, когда я проверяю этот переключатель и нажимаю кнопку «Выполнить», он вызывает метод validate (). Поэтому я сначала поместил этот метод во внутренний класс, который реализовал Runnable
class ValidateThread implements Runnable {
public void run() {
validate();
}
}
Затем я вызвал эту ветку в ActionListener кнопки «Выполнить» так:
runButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// Some code checked on some radio buttons
if(radioButton.isSelected()) {
if(radioButton.getText().equals("VALIDATE")) {
Runnable runnable = new ValidateThread();
Thread thread = new Thread(runnable);
thread.start();
}
}
}
});
Вуаля! Вывод теперь отправляется в JTextArea.
Теперь вы заметите, что JTextArea не будет прокручиваться вниз с текстом. Таким образом, вам нужно установить позицию каретки как
textArea.setCaretPosition(textArea.getText().length() - 1);
Теперь, когда данные добавляются в JTextArea, они всегда будут прокручиваться вниз.