複数のアプレットを含むページがあります (はい、古いです)。これらのアプレットの 1 つは、次のように stop メソッドをオーバーライドします。
@Override public void stop() {
System.out.println("Stop called!");
}
しかし、これを行うと、タブを切り替えたり、stop()
. 同じ問題がオーバーライドでも発生していますdestroy()
。ただし、関数start()
とinit()
関数は期待どおりに機能します。
私のアプレットは、JApplet を拡張する別のクラスを拡張しています。これを行ったのは、すべてのアプレットが特定の関数 (この中間クラスで定義されている) にアクセスできるようにするためです。これらのアプレットは、反復タスク用の別のスレッドも作成しますが、それがライフサイクル メソッドに影響を与えるとは思いません。この時点でどこを見ればよいかわかりません。フォーカス関数またはそのようなものがライフサイクル メソッドの実行を妨げている可能性はありますか、または 1 つのページに複数のアプレットがあるとこれらのメソッドで問題が発生する可能性はありますか? 事前に感謝します。
編集: この動作を示すためにサーバーに SSCCE を投稿しましたClick here to run and Here to dowload sources、これはスレッドを開始する単純なアプレットであり、JDialog を開く親アプレットのメソッドを呼び出します。ダイアログが開いている間 (他のタブが開いている限り) ブラウザーのタブを閉じることができ、IE10 では stop または destroy print ステートメントは発生しません。その上、JVM は実行を続け、Java コンソールは閉じません。ただし、ブラウザー ウィンドウを閉じる前にポップアップを確認すると、すべてが期待どおりに機能します。
したがって、問題は、ポップアップが開いているときに誰かがブラウザ ウィンドウを閉じた場合、どうすれば余分なスレッドとポップアップ自体を強制終了できるかということです。