0

これを明確に説明できることを願っています。私はアプレットを外部からプログラム的に停止したいのですが、それでもステータス コード 0 を返す「礼儀正しい」方法で停止したいと考えています。

詳細: 私は、exec() が "appletviewerembed.html" を実行し、起動されたプロセスの pid を取得するテスト/ベンチマーク フレームワークに取り組んでいます。私が行っていたことは、5 秒間待ってから X ディスプレイを開き、_NET_WM_PIDプロパティが pid に等しいウィンドウを検索し、そのウィンドウに WM_DELETE_MESSAGE を送信することです。ただし、これはJava 1.5以降でのみ機能します.1.4以降では_NET_WM_PIDが設定されていないため、開いたばかりのウィンドウが見つかりません.

明確にするために:アプレットのクロージャーは「通常」でなければならないため、 signal()の使用は私が望んでいるものではありません。

繰り返しますが、これはテスト/ベンチマーク フレームワークです。停止は、アプレットの変更によってではなく、フレームワークによって開始される必要があります。テスト/実行するアプレットが多数あり、フレームワークはユーザーの操作なしでそれらすべてを 1 つずつ実行する必要があります。

私が検討した方法は次のとおりです。

  1. exec()の前後でWM_CLASSプロパティにsun-applet-mainが含まれるウィンドウのリストを作成し、そのリストを比較して、 exec()の後に開いたウィンドウを特定します。

  2. 独自のアプレット ビューアーを作成し、SIGUSR1を受け入れるようにして、アプレットを閉じます。たとえば、 destroy()メソッドを呼び出します。

より良い提案はありますか?

4

1 に答える 1