java - swingworker恢复时的java问题

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

我的swingworker线程有些问题,问题是我取消了。 基本上,我有一个start按钮,当点击它时运行我的swingworker 。

从这里我的swing工作者做了许多小事情,但主要的事情是它完成了一些长期运行的反射调用。

我也有一个取消按钮- 你可能猜到了取消我的swingworker 。 但是问题是我有一个 Bug,我无法精确定位。

在第一次运行时取消应用程序中间路径,但是,如果再次单击"重新启动"。 我不知道这是为什么,因为被取消的线程正在恢复并实际记住状态。 我知道这是因为在我的gui上,我有一个指示"正在处理 15的元素 1.。",它跳回到取消的点。


public class Test


{


 private SwingWorker<Object, Integer> swingworker = initiate(); 


 private void startListener()


 {


 start.addActionListener(new ActionListener ()


 { 


 public void actionPerformed(ActionEvent e) 


 { 


 runIt(); 


 }


 }); 


 }



 private void runIt()


 {


 try


 {


 if(swingworker. isDone())


 swingworker = getSwingWorker();



 swingworker.execute();


 }


 catch (HeadlessException e) { } 


 catch(Exception e){LogFileWriter.log(e);}


 } 



 private SwingWorker<Object, Integer> getSwingWorker()


 {


 return new SwingWorker<Object, Integer>() 


 {


 Object o;



 protected Object doInBackground() throws Exception 


 { 


//do some short calcs


 doLongCalc();


 return o;


 }



 protected void done()


 { 


 if(!swingworker. isCancelled()) {}//chnage the gui values like enable/disable button } 


 else{}//it was cancelled so stop progress bar and stuff



 }


 }; 


 }



 private void cancelListener()


 {


 cancel.addActionListener(new ActionListener ()


 { 


 public void actionPerformed(ActionEvent e) 


 {



 if(swingworker.getState() == SwingWorker.StateValue.STARTED || swingworker.getState() == SwingWorker.StateValue.DONE)


 {


 swingworker. cancel(true);


 }


 }


 }); 


 }



 private void doLongCalc()


 {


//wrap the taks in checks for cancelled or not


 if(!swingworker.isCancelled())//do something


 if(!swingworker.isCancelled())//do something


 if(!swingworker.isCancelled())//do something


 if(!swingworker.isCancelled())//do something


 }


}



时间: 原作者:

SwingWorker设计为执行一次,你可以看下面的post ,如何取消SwingWorker的执行

这可能会解决你的问题或者你会发现答案。

原作者:
...