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