次のような新しい非デーモン スレッドを作成する Java アプレットがあります。
Thread childThread = new Thread(new MyRunnable(_this));
childThread.setDaemon(false);
childThread.start();
次に、私のMyRunnable
オブジェクトは、C++ で実装されたネイティブ メソッドを呼び出します。
@Override
public void run() {
while (true) {
if (!ran) {
System.out.println("isDaemon: " + Thread.currentThread().isDaemon());
_applet.invokePrintManager(_applet.fFormType,
_applet.fFormName, _applet.fPrintImmediately,
_applet.fDataSet);
ran = true;
}
}
}
この C++ メソッドは、フォームを表示する C# DLL を呼び出します。私の問題は、ユーザーが Java アプレットを含むページから移動するたびに、JVM (および私の C# フォーム) が強制終了されることです。ユーザーがフォームを閉じるまで、フォームと JVM を開いたままにしておく必要があります。スレッドを非デーモンスレッドに設定しようとしましたが、これはSystem.out.println("isDaemon: " + Thread.currentThread().isDaemon()
印刷のために機能していますisDaemon: false
。
C#フォームの作成方法に関連するものはありますか(私が説明していない別のスレッドはありますか)、または私が見落としているものはありますか?? 私のスレッドはデーモン スレッドではありませんが、とにかく JVM が強制終了されています。