[英]Issue with swingworker resuming
我的swingworker線程遇到了一些麻煩,問題就在於我取消了。 基本上,我有一個開始按鈕,點擊時運行我的swingworker。
從這里我的搖擺工作者做了很多小事,但主要的是它完成了一些長時間運行的反射調用。
我也有一個取消按鈕 - 你可能猜到了取消我的搖擺工。 然而問題是我有一個我無法指出的錯誤。
在第一次運行中途取消應用程序后,swing工作者完全取消,但是,如果我再次單擊start並讓它在完成時一直運行 - 該線程似乎從我取消的地方回來了首輪 :/ 。 我不知道為什么會這樣,它就像取消的線程正在恢復並實際記住狀態一樣。 我知道這種情況正在發生,因為在我的gui上我有一個JLabel,上面寫着“處理15個元素中的元素......”並且它會跳回到取消的點。
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設計執行一次,您可以查看以下帖子如何取消SwingWorker的執行?
這可能會解決您的問題,或者您會找到答案。
我發現我實際上並沒有正確捕捉和處理異常。 因此,計划流程仍在繼續,應該停止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.