2009-06-30 8 views
0

JFrameを作成して表示させるプログラムがあります。 JFrameが完全に描画されて表示されていることを知りたい場合はありますか?今、ハッキーな「待ち伏せ」の方法が使われています。JFrameが完全に描画されたことを知ります

答えて

2

addWindowListenerからJFrame; windowOpenedが実行されると、ウィンドウが表示されます。

+0

ああ、待って、あなたはおそらくリスナーなどを望んでいた。削除中... –

+0

その何か、私はちょうど他のどこかで私の待機を移動しているので、私はポーリングが嫌い... – Sandro

+0

リスナーのアプローチに変更されました(参考のために、元の答えはisShowing()をチェックすることを提案しました)。 –

0

また、コンポーネントが描画されたときに呼び出されると思われるComponent.addNotify()をオーバーライドすることもできます。 super.addNotify()に必ず電話してください。

あなたがSwingWorkerを使用することができます:「得、具体的に実行するためのSwingのスレッドを待つことができますどのように」という質問に答えるために

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

。私は潜在的に問題文を参照してくださいもう一度あなたのコメントを読ん

編集

私は、スレッド内のJFrameを作成していますが、私はそのスレッドが表示されるようにJFrameのを待ちたいです。

このスレッドでもframe.setVisible(true)に電話していますか?そうであれば、SwingペインティングはすべてAWT EventQueueで処理する必要があることに気付かれるはずです。これは、SwingWorkerが入っている場所です。

しかし、 'yield and wait'には、待機/通知操作が必要な場合があります。あなたのSwingWorkerの中で、その後

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

、またはどこでも(真)frame.setVisibleを呼び出して、あなたの待機中のスレッドをウェイクアップするnotifyAll()メソッドを使用してプロセスを終了することができます:あなたの呼び出し元のスレッドでは、共有オブジェクトに待つことができます:

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

どのように具体的に?私はそれがどのように役立つか正確にはわかりません。ありがとうございました。 – Sandro

+0

ビンゴ!ありがとうございました! – Sandro

関連する問題