好吧,我有下面的代码可以正常工作,但我想了解这段代码中的线程是如何工作的。
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。
我的概念对吗?