我有一个自定义的JDialog,当我的SwingWorker线程启动时弹出。该对话框只有一个JProgressbar和一个Button(取消按钮)。我想弄清楚如何取消我的SwingWorker,但我没有运气。我想我现在正走在正确的道路上。我写了一个取消方法,现在我只需要弄清楚当按下按钮时如何调用它。代码如下......
btn_Cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
//trying to access cancel()
}
});
SwingWorker worker = new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
while (runLoad.getState() != Thread.State.TERMINATED && !isCancelled()) {
try {
synchronized (this) {
Thread.sleep(2000);
}
} catch (InterruptedException e){}
}
return null;
}
@Override
public void done() {
try {
get();
} catch (InterruptedException | ExecutionException ex) {
JOptionPane.showMessageDialog(null,
"Somethings Wrong: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
Progress.setVisible(false);
Progress.dispose();
}
public void cancel(SwingWorker worker){
worker.cancel(true);
}
};
worker.execute();
答案 0 :(得分:1)
您的取消按钮应调用SwingWorker#cancel
方法
final SwingWorker worker = ...;
btn_Cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
worker.cancel( true );
}
});
在你的工人中,你必须确保检查取消标志
SwingWorker worker = new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
while ( !isCancelled() ) {
//do your stuff
}
}
}
请注意,您需要在创建ActionListener
答案 1 :(得分:0)
正如in the official documentation所述,您需要在isCancelled()
回调方法中查看SwingWorker
。
答案 2 :(得分:0)
你可以打电话
worker.cancel(true);
你的按钮动作监听器中的?
答案 3 :(得分:0)
你应该致电
worker.cancel(true);
//这将设置工作人员的取消标志
然后,当您调用isCancelled()
时,这将返回true
。那么你
可以在循环中检查这种状态