次のような状況があります。私のプログラムは、テキスト付きのJFrameを繰り返し表示するようなものを繰り返し呼び出します。私はそのフレームからテキストを読みました。フレームには特殊な型があります。それをMyFrameTypeと呼ぶことにしましょう。型で認識し、各呼び出しの終わりに、私が知っているフレームを閉じるすべての方法でフレームを破棄します。 )ループ内で今消えないJFrame
callMyFrame();
Frame[] frames = Frame.getFrames();
for (Frame openFrame : frames) {
if (openFrame instanceof MyFrameType) {
MyFrameType myFrame = (MyFrameType) openFrame;
(do something, read the frame etc.)
myFrame.setVisible(false);
myFrame.dispose();
myFrame.dispatchEvent(new WindowEvent(
myFrame,
WindowEvent.WINDOW_CLOSED));
break;
}
}
で、問題がある:フレームが実際に閉じられますしながら、(常に何らかの理由で最後フレームの場合ではありませんこれは - 時にはそれが閉じます、時々ではありません)、クローズドフレームはまだフレーム配列によってリストされ、プログラムは間違ったフレームからの読み込みを終了します - 最初に見つかったMyFrameType、実際に開いているのは1つだけです。 getFrames()
は、アプリケーションによって作成されたすべてフレームを取得します。しかし、これらの配置されたフレームをどのように除外して、以前に作成されたランダムなフレームを選択するだけではありませんか?問題のフレームには所有者がいないので、所有者がいないフレームを削除しても機能しません。 JFrame
ここで、表示可能である場合は、単に確認することができ
フレームを廃棄するときには、 'frames'配列もう一度それを訪問することを避けるために? –
説明はこのアプリを作る。エンドユーザーにとって恐ろしい経験のように聞こえる。 [複数のJFramesの使い方、良い/悪い練習](http://stackoverflow.com/q/9554636/418556)を参照してください。この場合、フレームはおそらくダイアログであり、数多くの代わりにちょうど1、それへの参照を保持し、それが必要なテキストとそれを表示します。 –
'callMyFrame()'によって呼び出されたプログラムは私のものではないので、何も変更することはできません。多くのフレーム(それぞれのループに配置されています)でなければなりません。 – alexmagnus