0

複数のアプレットを含むページがあります (はい、古いです)。これらのアプレットの 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 コンソールは閉じません。ただし、ブラウザー ウィンドウを閉じる前にポップアップを確認すると、すべてが期待どおりに機能します。

したがって、問題は、ポップアップが開いているときに誰かがブラウザ ウィンドウを閉じた場合、どうすれば余分なスレッドとポップアップ自体を強制終了できるかということです。

4

3 に答える 3

1

Zip をダウンロードして展開し、2 つのソースを SSCCE に変換した後 (SSCCE は定義上 1 つのソース ファイルです)、IE9 で同じ動作をすることに気付きました。

これは、ブラウザと JVM の相互作用のバグのもう 1 つの例のように思えます。FF では、ダイアログが開いているときに、ユーザーはページを閉じたり、タブを変更したりできません。アプレットのタブを閉じる (またはタブの変更やブラウザを閉じる) 前にダイアログを閉じる必要があるため、これは期待どおりの動作につながります。

IE9 (およびレポートによると 10) では、ダイアログが表示されていてもページにアクセスできるため、すべての問題が発生します。

残念ながら、私が考えることができる唯一の回避策は、うまくいきませんでした。必要なイベントが によって検出される場合もありますComponentListenerが、この場合、タブを閉じたり、タブを変更したりしても発生しません。

したがって、バグデータベースで類似のものを検索することをお勧めします。何も見つからない場合は、新しいレポートを作成し、オラクルがこの問題について何と言っているかを確認してください。それがバグであり、それが IE のせいであると彼らが考える場合、彼らは MS で取り上げることができます。

于 2013-10-02T11:00:04.017 に答える