gpt4 book ai didi

java - 取消 Swing worker 的问题

转载 作者:行者123 更新时间:2023-12-04 05:59:45 25 4
gpt4 key购买 nike

我在取消 Swing worker 时遇到了一些问题。阅读文档后我不确定如何解决这个问题

sw = new SwingWorker<Object, Void>()
{
Object o;
protected Object doInBackground() throws Exception
{
//do some long running task via a method call
}
}

然后在我的取消按钮处理程序中,我只想调用 sw.cancel(true);
虽然这似乎不起作用。根据文档, Swing worker 不需要如何取消自己。但是,如果运行 Swing Worker 的方法只被调用一次,那么我如何用 thread.sleep 来解决这个问题(这是我读过的一种解决方法)

谢谢

最佳答案

Swing 实际上会使用 Future 监控您的工作。当您尝试取消工作线程时,Swing 将调用 future.cancel(true) (真值将尝试 interrupt() 正在执行的线程)。

这意味着您的工作需要对中断使用react。如果长时间运行的计算不响应中断,您将不得不放入一些检查点并做出相应的响应

protected Object doInBackground() throws Exception      
{
//do part 1 of long running task
if(Thread.currentThread().isInterrupted()){
//clean up and return
}
//do part 2 of long running task
if(Thread.currentThread().isInterrupted()){
//clean up and return
}
//etc..
}

Swing 将简单地通知正在执行的线程它应该取消。您有责任实际执行取消。

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

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