我有一个自定义 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();
最佳答案
您的取消按钮应调用 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
之前创建工作线程
关于java - 试图阻止 Swing worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427697/