gpt4 book ai didi

java - Swing worker 恢复的问题

转载 作者:行者123 更新时间:2023-12-02 07:55:39 26 4
gpt4 key购买 nike

我的 Swingworker 线程遇到了一些问题,问题是当我取消时。本质上,我有一个启动按钮,单击该按钮即可运行我的 Swingworker。

从这里开始,我的 Swing Worker 做了许多小事情,但最主要的是它完成了一些长时间运行的反射调用。

我还有一个取消按钮 - 正如您可能猜到的那样,它会取消我的 Swing worker 。然而问题是我有一个我无法查明的错误。

在第一次运行中途取消应用程序后, Swing 工作人员会完美取消,但是,如果我再次单击“开始”并让它在完成时一直运行 - 线程似乎会从我的位置恢复第一次运行时取消:/。我不知道为什么会这样,看起来好像被取消的线程正在恢复并实际上记住了状态。我知道这种情况正在发生,因为在我的 gui 上,我有一个 JLabel,上面写着“正在处理 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被设计为执行一次,你可以看看下面的帖子 How cancel the execution of a SwingWorker?

这可能会解决您的问题,或者您会找到答案。

关于java - Swing worker 恢复的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9684024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com