-1

好的,我有一个看起来像这样的代码:

public class Test
{   

private JPanel dummy;

public checker()
{
    dummy = new JPanel();
    dummy.setVisible(false);

    dummy.addComponentListener(new ComponentAdapter()
    {
        @Override
        public void componentShown(ComponentEvent arg0)
        {
            dummy.setVisible(false);
            runCheck();
        }           
    });

    runCheck();
}


private void runCheck()
{
    if (a)
    {
        //do something
        dummy.setVisible(true);
    }
}

}

这将创建一个虚拟 JPanel 并添加一个组件适配器,每次将 dummy 设置为可见时将触发该组件适配器。它像一个while循环一样工作,只是它确保在进入另一个循环之前更新GUI。

checker()但是一旦循环中断,我需要方法来返回一个值。

注意:这是代码的简化版本,我无法检查条件a,这不是解决方案。

4

2 回答 2

3

用于在后台SwingWorker执行runCheck()循环。调用

dummy.setVisible(false);
worker.execute();

您可以拨打电话setVisible(true),如此done()所示。setEnabled()

于 2013-08-04T21:50:17.327 回答
1

我想到了。我可以使用secondaryLoop。我无法解释它实际上是如何工作的,但它使我能够冻结程序(但 EDT),并且在代码被冻结时,将事件添加到 EDT 队列中,这些事件立即完成(如果 EDT 不忙于做任何事情否则,就我而言,不是)。

更多主题:链接

于 2013-08-05T19:05:31.950 回答