0

我有一个 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 无论如何都被杀死了。

4

1 回答 1

1

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

于 2013-06-24T19:53:26.897 回答