Я новичок в Swing и в настоящее время пытаюсь разработать простое приложение с графическим интерфейсом в NetBeans.
Я хочу создать какую-то систему ведения журнала с графическим интерфейсом, чтобы записывать текущее действие, выполняемое приложением, в TextArea.
В качестве простого примера я создал форму JFrame, которая содержит только 2 объекта: кнопку «Пуск» и TextArea.
Когда нажата кнопка «Пуск», он вызывает какой-то длительный метод, который должен занять некоторое время (скажем, 10 секунд) для завершения работы, и пока этот метод работает, я хочу добавить текст в TextArea из этого длительный метод (и, конечно, я хочу, чтобы TextArea немедленно обновлялся).
Моя проблема в том, что я не могу найти правильный способ сделать это. Во всяком случае, я пытался это сделать, когда я нажимаю кнопку «Пуск», приложение зависает на 10 секунд, не обновляя TextArea, как я хотел. Только когда метод завершается, я вижу обновление TextArea.
Вот пример кода:
private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
try {
for (int i = 0; i < 10; i++) {
textArea.setText(i + "\n");
Thread.sleep(1000);
}
} catch (Exception e) {}
}
В этом примере я ожидаю увидеть, что как только я нажму кнопку, в течение следующих 10 секунд новая строка будет добавляться к TextArea каждую секунду, например:
1
2
3
4
...
Но реальный результат, который я получаю от этого кода, заключается в том, что приложение зависает на 10 секунд, и, наконец, TextArea обновляется и отображает только цифру 9.
Я испробовал много различных способов сделать это правильно, в основном используя методы SwingUtilities.invokeLater и SwingWorker, но ни один из них не работал у меня.
Любая помощь в поиске правильного способа сделать это будет принята с благодарностью.
"I've tried many different methods of doing this right, mainly using the SwingUtilities.invokeLater and SwingWorker methods, but none of them worked for me."
-- невозможно понять, что вы делаете не так, если вы не показываете попытки. SwingWorker сработает в этой ситуации, так что покажите нам, как вы пытались его использовать, и у нас будет больше шансов помочь вам. - person Hovercraft Full Of Eels   schedule 05.08.2012