0

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

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。

我的概念对吗?

4

0 回答 0