我有一个 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()
prints正在工作isDaemon: false
。
是否有与创建 C# 表单的方式相关的东西(是否有另一个我没有考虑的线程)或我忽略的东西?我的线程不是守护线程,但 JVM 无论如何都被杀死了。