gpt4 book ai didi

使用 JNI 的 Java 守护线程

转载 作者:行者123 更新时间:2023-12-01 14:24:27 24 4
gpt4 key购买 nike

我有一个 Java 小程序,它创建一个新的非守护线程,如下所示:

  Thread childThread = new Thread(new MyRunnable(_this));
childThread.setDaemon(false);
childThread.start();

然后我的 MyRunnable 对象调用用 C++ 实现的 native 方法:

  @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:假

是否有与 C# 表单创建方式相关的内容(是否有另一个我没有考虑到的线程)或我忽略的内容?我的线程不是守护线程,但 JVM 无论如何都会被杀死。

最佳答案

一旦运行小程序的所有页面都关闭,为小程序启动的 JVM 就会终止。这是为了避免恶意或损坏的页面占用您计算机上的资源。为了避免这种情况,您有多种选择。您可以让小程序的持久部分在用户无法离开的框架中运行。或者,当他们尝试离开时,您可以发出警告(就像您输入部分问题时 Stack Overflow 所做的那样)。或者您可以使用其他一些服务器端持久性。或者您可以尝试使用 webstart 而不是小程序。

关于使用 JNI 的 Java 守护线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17280199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com