2009-06-26 12 views
2

リフレクションを使用して別のJavaプログラムのmain(String [] args)メソッドを見つけて呼び出すJavaプログラムがあります。この他のプログラムは通常、独自のスレッドを生成する傾向のあるSwing Appです。私は、この他の「プログラム」がいつ終了するかを判断する方法があるかどうか疑問に思っていました。私はそれがホストプログラムと同じスペースで実行されるため、これを検出する方法があるかどうかはわかりません。現在の方法は、開かれているフレームのどれかが私たちのものではなく、正確には最大の解決策ではないかどうかをチェックすることです。そのプロセスで子プログラムを実行することは、実際にはオプションではありません。javaリフレクションを使用してアプリケーションを開始した時期を判断する方法

EDIT:これは二重のアプローチです。最初にThreadGroupを作成し、そのグループのメンバーであるスレッドで子プログラムを起動します。子フレームに属するフレームがある場合は、Frame.getFrames()を必ずチェックしてください。

が--Sandro

答えて

1
が別々 ThreadGroupに子アプリを起動し

、ありがとう(おそらく最高デーモンスレッドグループとして設定)し、定期的にそれが実行中のスレッドやサブグループが含まれているかどうか確認してください。

+1

わからない。それは別のEDTを取得しませんでした。メイン()が終了すると、このチェックは誤った答えを返す可能性があります。 – akarnokd

+0

非公開APIを使用してAppContextを設定する必要があります。 –

+0

今すぐ試してみてください。すぐに結果が返ってきます。 – Sandro

0

この子アプリケーションが使用しているウィンドウを検出する方法がある場合は、適切なWindowリスナーを接続して、すべてのcloseイベントを待つだけです。

編集:

イベントリスナーのアプローチを使用するには、少なくともあなたは、フレームのために常にではないループし、クエリすることができます。 スポーンされたスレッドの場合、私はヒントを得ていません。独自のスレッドを追跡してアプリケーションのスレッドを発見する方法がある場合は、フレームと同じループを実行できます。

編集2:

私の心に入ってくる何がスレッドやその他の情報を取得するために自分自身にJMXを使用することですが、私はあまり詳細にJMXを知りません。

+0

しかし、それがスレッドを生成するのであれば?どのようにそれらを追跡するのですか?そして今、私はFrames.getFrames()を使ってウィンドウをチェックしています。しかし、ウィンドウにリスナーを追加しても、始まりです。 – Sandro