Метод запуска 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 когда-либо вызывает из этого потока?
- Является ли описанная выше ситуация ошибкой или ожидаемым поведением?