有没有办法让 SwingWorker(在 doInBackground 方法中)到达代码的某个点,停在那里,监视某个变量,然后在变量更改为可接受的值时恢复?
我知道我可以这样做:
do {
Thread.sleep(500);
} while (variable == false);
但这是一种非常丑陋的做法......
有什么建议么?
编辑:所以等待并通知它......但是,我绝对不知道如何实现它,即使在阅读了几个教程之后......
所以这是我目前的情况:
我有一个在 doInBackground 方法中执行某些操作的 SwingWorker:
doInBackground()
{
doSomething();
//BLOCK (PAUSE) HERE
doSomethingElse();
}
另一方面,我有一个附加了监听器的对象,它在 doSomething(); 时触发。被执行。
doSomethingElse() 访问和更改与侦听器类似的事物,因此它们相互干扰。
所以我的目标是在监听器中添加一行代码,这将解除 doInBackground() 代码的块。下面是带有监听器的类的样子:
public class myClass extends JPanel()
{
addComponentListener(new ComponentAdapter()
{
@Override
public void componentResized(ComponentEvent arg0)
{
doThings();
//LIFT BLOCK AND LET THE SWINGWORKER CODE CONTINUE
}
}
}
所以,操作顺序应该是:
doSomething();
doThings();
doSomethingElse();
此外,我可以从 SwingWorker 访问侦听器,但不能以其他方式访问(但我可能能够使其工作);
最后一件事:Listener 不仅仅由 SwingWorker 调用,它可以从其他来源(例如用户)调用,而 SwingWorker 甚至不必被实例化。