2015-01-08 3 views
0

Мой класс gui распространяется JFrame. GUI содержит два значения: JButton (start_button и view_button).Как выполнить другое действие во время выполнения одного действия?

JButton start_button; 
    JButton view_button; 

Действие, которое необходимо выполнить после нажатия кнопки start_button, занимает некоторое время (от 2 мин до 5 мин).

start_button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      //... 
      //action executing. May take 2 to 5 min to complete. 
     } 
    }); 

Хотя это действие выполняется, я хочу видеть журнал статус этого действия в отдельном TextPane закрытом внутри JDialogue. И это JDialogue становится видимым, нажимая view_button.

view_button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      myJDialogue.setVisible(true); 
     } 
    }); 

Однако я не могу не получить доступ к любому из компонентов графического интерфейса, если и пока действие, выполняемое start_button закончена. И поэтому я не могу проверить журнал состояния в реальном времени, нажав view_button. Как это сделать, пока выполняется одно действие? Пожалуйста помоги. Благодарю.

ответ

2

Вам нужно выполнить свою долговременную задачу в отдельном Thread, чтобы вы не мешали графическому интерфейсу отвечать на события.

Для получения дополнительной информации ознакомьтесь с разделом из учебника Swing по телефону Concurrency. Возможно, SwingWorker - это самый простой подход, поскольку он создает Thread для вас и уведомляет вас о завершении Thread, чтобы вы могли обновить GUI.

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