Как выполнить другое действие, пока выполняется одно действие?

Мой класс графического интерфейса расширяет 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. Как я могу сделать это во время выполнения одного действия? Пожалуйста помоги. Спасибо.


person user1612078    schedule 08.01.2015    source источник


Ответы (1)


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

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

person camickr    schedule 08.01.2015