java - java试图停止 swingworker

  显示原文与译文双语对照的内容

我有一个定制的自动启动,当我的SwingWorker线程启动时弹出。 这个对话框只有JProgressbar和按钮( 取消按钮) 。 我在想怎么取消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 之前,你需要创建工人

原作者:
...