2009-06-30 51 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()' 
}