有没有办法可以让SwingWorker(在doInBackground方法中)到达代码的某一点,停在那里,监视一个ceratin变量,然后在变量变为可接受的值时恢复?
我知道我可以这样做:
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访问监听器,但不能以其他方式访问(但我可以使其工作);
最后一件事:只有SwingWorker不调用Listener,当SwingWorker甚至不需要实例化时,它可以从其他来源(例如用户)调用。
答案 0 :(得分:2)
您可以使用并发库中的一个工具,例如CountDownLatch。