Изменить текст метки, прежде чем произойдет чтение файла - PullRequest
2 голосов
/ 23 сентября 2011

Я некоторое время не использовал java и пытаюсь сделать что-то подобное в одном основном классе:

// do stuff
this.label.setText("Status: IDLE");
// do things
this.label.setText("Status: LOADING..."); // set to loading right before file read
// read and parse huge file
this.label.setText("Status: DONE");

Я хочу, чтобы на ярлыке было показано «загрузка ...» в виде большого файлачтение выполняется, но метка никогда не зависает (поскольку задание выполняется).Как я могу заставить метку измениться во время чтения?Нужно ли использовать отдельный класс / поток?Заранее спасибо за помощь.

Ответы [ 4 ]

3 голосов
/ 23 сентября 2011

Как я могу заставить метку измениться во время чтения?Нужно ли использовать отдельный класс / поток?

Да, вы правы.Метка и класс, который изменяет свое значение, должны находиться в разных потоках.

Взгляните на SwingUtilities invokeLater :

Runnable newThread = new Runnable() {
     public void run() {
     }
 };

Вы можете создать эту темупуть показанный выше.

2 голосов
/ 23 сентября 2011

Используйте SwingWorker для долгосрочной задачи.Затем вы можете опубликовать текст, когда необходимо обновить метку.

Прочтите Параллельность в Swing для получения дополнительной справочной информации.

2 голосов
/ 23 сентября 2011

Да.Вам нужна отдельная тема.Взгляните на JProgressBar и некоторые примеры :

2 голосов
/ 23 сентября 2011

Выполнить файл ввода-вывода в фоновом потоке.И вы можете использовать SwingUtilities.invokeLater(...), чтобы обеспечить настройку текста метки в EDT.Или вы можете просто использовать вспомогательный класс SwingWorker, который сделает все это за вас.

Удачное кодирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...