2009-06-30 52 views
0

我有一个程序可以创建一个JFrame并使其可见。无论如何知道JFrame何时完全绘制且可见?现在正在使用一种冒险的“等待和祈祷”方法。了解JFrame何时完全绘制

回答

2

你可以add a WindowListenerJFrame;那么当windowOpened被触发时,窗口应该是可见的。

+0

哦,等等,你可能想要一个听众或一些这样的事情。删除... – 2009-06-30 18:12:02

+0

它的东西,我讨厌投票,因为我只是移动我的其他地方等待... – Sandro 2009-06-30 18:13:08

0

您也可以尝试覆盖Component.addNotify(),我相信在组件绘制时会调用它。请务必致电super.addNotify()

public void addNotify() { 
    super.addNotify(); 
    // after displayed handling 
} 
1

回答“如何产生,并专门等待Swing线程执行”的问题:

可以使用SwingWorker

编辑 阅读您的评论再一次我看到了一个潜在问题的声明:

我在一个线程创建一个JFrame,然后我想这线程等待对JFrame出现。

您是否在此主题中调用您的frame.setVisible(true)?如果是这样,你应该提醒你Swing绘画应该都在AWT EventQueue上处理。这是SwingWorker进来的地方。

但是,您可能需要的'yield and wait'是等待/通知操作。在您的调用线程可以等待一个共享对象:

synchronized (frameShowingLock) { 
    frameShowingLock.wait()' 
} 

然后在你的SwingWorker,或任何你叫frame.setVisible(真),你可以通过使用notifyAll()方法来唤醒你的等待线程完成该过程:

synchronized (frameShowingLock) { 
    frameShowingLock.notifyAll()' 
}