让SwingWorker等待变量更新

时间:2013-02-14 03:32:58

标签: java swing swingworker

有没有办法可以让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甚至不需要实例化时,它可以从其他来源(例如用户)调用。

1 个答案:

答案 0 :(得分:2)

您可以使用并发库中的一个工具,例如CountDownLatch。