Java SwingWork如何与EDT协同工作?
好的,我有下面的代码可以很好地工作,但是我想了解在这段代码中线程是如何工作的Java SwingWork如何与EDT协同工作?,java,multithreading,swing,swingworker,event-dispatch-thread,Java,Multithreading,Swing,Swingworker,Event Dispatch Thread,好的,我有下面的代码可以很好地工作,但是我想了解在这段代码中线程是如何工作的 private void jLabelInicioMovimentacaoMouseClicked( java.awt.event.MouseEvent evt) {// GEN-FIRST:event_jLabelInicioMovimentacaoMouseClicked jStatusBar1.setWaitState(false); jStat
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)(第一行)时代码>此代码立即在EDT(事件调度程序线程)中执行,其他行也执行
但是当我执行this.sw=new SwingWorker()…
时,我正在创建一个新线程(在EDT之外),当这个“外部线程”完成时,从EDT调用方法“finished()”,并更新jStatusBar1
我的想法是对的 请如何回答您的问题,似乎您从未阅读过Oracle教程,请您理解为什么SwingAPI中有SwingWorker,它是如何工作的,等等……您使用的SwingWorker
类是什么?JDK中的方法既没有finished
也没有construct
方法