-1

有没有办法让 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 甚至不必被实例化。

4

1 回答 1

2

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

于 2013-02-14T03:35:40.250 回答