2013-02-28 4 views
2

У меня есть диалог, содержащий несколько кнопок. Когда нажата конкретная кнопка, ActionListener вытесняет процесс, который занимает несколько секунд. В течение этого времени я хочу предоставить пользователю некоторую обратную связь. Чтобы сделать простой подход, у меня есть метка в диалоговом окне «Вычисление ...», которое изначально не видно. Сегмент кода выглядит следующим образомlabel.setVisible (true) ничего не делает, пока процесс не завершится

button_OpenHoursReport.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     lbl_Computing.setVisible(true); 
     new runAndRenderReport(); 
     RunAndRenderReport.main(null); 
     lbl_Computing.setVisible(false); 
    } 
}); 

Проблема в том, текст lbl_Computing не становится видимым, пока RunAndRenderReport не будет завершена. Очевидно, что это не очень помогает пользователю. Не знаю, куда идти отсюда. Это связано с потоками? Если да, я мог бы использовать некоторые рекомендации о том, как начать работу.

ответ

1

Трюк, который намного проще, чем использование SwingWorker, заключается в вызове paintImmediately на ваш ярлык после вызова setVisible (true). Вы должны увидеть эффекты - немедленно.

lbl_Computing.paintImmediately(0, 0, lbl_Computing.getWidth(), lbl_Computing.getHeight()); 

Но SwingWorker это путь, если вы хотите, чтобы ваш GUI будет реагировать другими способами, а также в то время как отчетность работает.

+0

Спасибо. Я возьму paintImmediately подход сейчас, так как мой GUI может подождать несколько секунд, чтобы процесс завершился. Я буду смотреть в SwingWorker в будущем, когда мне нужен GUI, чтобы быть отзывчивым. – Paul

+0

Для короткого детерминированного отставания также рассмотрим установку 'WAIT_CURSOR'. – trashgod

5

actionPerformed() выполнен на графическом интерфейсе (EDT), поэтому избегайте выполнения интенсивных операций с ним. Вместо этого используйте SwingWorker.

См. How SwingWorker works.

+0

Спасибо за ваше предложение. Пока, я возьму краску сразу. – Paul

Смежные вопросы