SwingWork如何与EDT协同工作?

时间:2013-10-09 15:33:19

标签: java multithreading swing swingworker event-dispatch-thread

好吧,我有下面的代码可以正常工作,但我想了解这段代码中的线程是如何工作的。

private void jLabelInicioMovimentacaoMouseClicked(
            java.awt.event.MouseEvent evt) {// GEN-FIRST:event_jLabelInicioMovimentacaoMouseClicked     

        jStatusBar1.setWaitState(false);
        jStatusBar1.setWaitStartMessage("Pesquisando...");
        jStatusBar1.setWaitState(true);

        this.sw = new SwingWorker() {

            @Override
            public Object construct() {
                try {
                    jGDataTextFieldDataInicial
                            .setValue(retornarPrimeiroDiaMovimentacao());
                } catch (Exception e) {
                    e.printStackTrace();
                    JGOptionPane.showMessageDialog(FFormMain.this,
                            "Ocorreu um erro nas bibliotecas",
                            JGOptionPane.ERROR_MESSAGE);
                }
                return null;
            }

            @Override
            public void finished() {
                jStatusBar1.setWaitStartMessage("Finalizado");
                jStatusBar1.setWaitState(false);
            }
        };
        sw.start();

    }// GEN-LAST:event_jLabelInicioMovimentacaoMouseClicked

所以,我的想法是:当我执行jStatusBar1.setWaitState(false) (first line);时,此代码会立即在EDT(事件调度程序线程)中执行,其他代码也会执行。

但是当我执行this.sw = new SwingWorker()...时,我正在创建一个新的线程(在EDT之外),当这个“外部线程”完成时,从EDT调用方法“finished()”并更新jStatusBar1。

我的观念是对的?

0 个答案:

没有答案