我有一个程序可以创建JFrame
并使其可见。反正知道JFrame
何时被完全绘制并可见?现在正在使用一种hacky“等待和祈祷”的方法。
答案 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
}