1

在运行由 jpackage 为 Mac OS X 构建的 Javafx 应用程序时,我注意到一些奇怪的事情。

如果我运行以下代码:

public class Test extends Application {

    public static void main(String[] args) {
        com.apple.eawt.Application.getApplication();
        launch(args);
    }
    
    public void start(Stage stage) {
        System.out.println(Thread.currentThread().getName());
    }

}

输出将是这样的:“AppKit 线程”

如果我注释掉,com.apple.eawt.Application.getApplication()那么我们会得到正确的输出:“JavafX Application Thread”

当我稍后在 Javafx 尝试加载 css 文件时遇到 NullPointerException 时,此问题是有问题的,因为它的 AppKit 线程有一个空的 ClassLoader。

我可以通过至少 3 种方式重现上述问题:

  • 调用com.apple.eawt.Application.getApplication()如上图。
  • 调用new JGoogleAnalyticsTracker(config, GoogleAnalyticsVersion.V_4_7_2);which 是我使用的库。

注意:当我从 Intellij 运行我的应用程序时,不存在上述问题。仅当我使用jpackage构建二进制代码来启动 JVM 时才会出现该问题。我正在使用 Java 14 和 Javafx 14。

我的问题:

  • 什么是“AppKit”线程,Java 从该线程调用是否正常?
  • 上述情况是错误还是预期行为?
4

0 回答 0