知道何时完全绘制JFrame

时间:2009-06-30 18:08:27

标签: java multithreading swing

我有一个程序可以创建JFrame并使其可见。反正知道JFrame何时被完全绘制并可见?现在正在使用一种hacky“等待和祈祷”的方法。

3 个答案:

答案 0 :(得分:3)

JFrame可以add WindowListener;然后当windowOpened被触发时,窗口应该是可见的。

答案 1 :(得分:1)

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

您可以使用SwingWorker

修改 再次阅读你的评论我发现了一个可能有问题的陈述:

  

我在线程中创建一个JFrame,然后我希望该线程等待JFrame出现。

你也在这个帖子中调用frame.setVisible(true)吗?如果是这样,你应该提醒你应该在AWT EventQueue上处理Swing绘画。这就是SwingWorker的用武之地。

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

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

然后在你的SwingWorker中,或者你调用frame.setVisible(true)的任何地方,你可以使用notifyAll()方法唤醒你的等待线程来完成这个过程:

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

答案 2 :(得分:0)

您还可以尝试覆盖我认为在绘制组件时调用的Component.addNotify()。只需确保拨打super.addNotify()

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