В моем коде пользователь нажимает кнопку, а затем я хочу, чтобы это вызывало фоновый поток SwingWorker, где я в основном перебираю список, перекрестно ссылаюсь на него с другими данными, а затем обновляю графический интерфейс с помощью JLabel для каждого прохода через мой петля. Проблема в том, что я знаю, что должен сделать это в doInBackground(), но мне нечего возвращать, и я также хочу обновлять JPanel с новым JLabel каждый раз, когда мой цикл зацикливается. Как мне это сделать? Спасибо!
Использование Swingworker для постоянного обновления графического интерфейса
Ответы (2)
Вот полный пример, который мне очень нравится Пример Swing Worker
Вы должны использовать publish()
и переопределить process()
Пример:
class Worker extends SwingWorker<Void, String> {
@Override
protected void doInBackground() throws Exception {
//here you make heavy task this is running in another thread not in EDT
//process after some time call publish()
}
@Override
protected void process(List<String> chunks) {
//this is executed in the EDT
//here you update your label
}
}
person
nachokk
schedule
26.08.2013
Прочтите руководство Swing по использованию Swing Worker, особенно раздел, посвященный Tasks that Have Interim Results
.
Вы захотите вызвать метод publish()
по мере необходимости в вашем цикле.
person
camickr
schedule
26.08.2013
Void
в качестве аргумента типа в объявлениеSwingWorker
. - person Sotirios Delimanolis   schedule 26.08.2013