好的,我的代码看起来像这样:
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
,这不是解决方案。
答案 0 :(得分:3)
使用SwingWorker
在后台执行runCheck()
循环。调用
dummy.setVisible(false);
worker.execute();
您可以在setVisible(true)
中致电done()
,如setEnabled()
所示{{1}}。
答案 1 :(得分:1)
我明白了。我可以使用secondaryLoop。我无法解释它是如何工作的,但是它使我能够冻结程序(但是EDT),并且在代码被冻结时,将事件添加到EDT队列中,这些事件是immediatley完成的(如果EDT没有忙于做任何事情)否则,在我的情况下,不是)。
有关主题的更多信息:link