Метод запуска Javafx работает в потоке AppKit вместо потока Javafx

Я заметил кое-что странное при запуске приложения Javafx, созданного с помощью jpackage для Mac OS X.

Если я запустил следующий код:

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 Thread".

Если я закомментирую com.apple.eawt.Application.getApplication() тогда мы получим правильный вывод: "JavafX Application Thread"

Эта проблема проблематична, когда я получаю NullPointerException позже, когда Javafx пытается загрузить файлы css, потому что поток AppKit имеет нулевой ClassLoader.

Я могу воспроизвести указанную выше проблему тремя способами:

  • Вызов com.apple.eawt.Application.getApplication() как показано выше.
  • Вызов new JGoogleAnalyticsTracker(config, GoogleAnalyticsVersion.V_4_7_2); которую я использую.

Примечание. Указанная выше проблема не возникает, когда я запускаю свое приложение из Intellij. Проблема возникает только тогда, когда я используюjpackageдля создания двоичного кода для запуска JVM. Я использую Java 14 и Javafx 14.

Мои вопросы:

  • Что такое поток "AppKit" и нормально ли, что Java когда-либо вызывает из этого потока?
  • Является ли описанная выше ситуация ошибкой или ожидаемым поведением?

0 ответов

Другие вопросы по тегам