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

Моят 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. Как мога да го направя, докато едно действие се изпълнява? Моля помогнете. Благодаря.


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


Отговори (1)


Трябва да изпълните своята дълго изпълнявана задача в отделен Thread, за да не попречите на GUI да реагира на събития.

Прочетете раздела от урока за Swing относно Concurrency за повече информация. Може би SwingWorker е най-лесният подход, тъй като създава нишката вместо вас и ви уведомява, когато нишката приключи, за да можете да актуализирате GUI.

person camickr    schedule 08.01.2015