macOS: как правильно установить JavaFX для запуска mqtt-spy? - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь запустить mqtt-spy-1.0.0.jar в моей системе macOS 10.14, но не запускается, возвращая следующее сообщение об ошибке: enter image description here

По словам разработчиков, эта проблема возникает, если в системе JavaFX отсутствует .

Последняя версия Oracle JDK установлена ​​в моей системе как можеткак видно ниже, я знаю, что Oracle исключил JavaFX из JDK в v11.enter image description here Поэтому я скачал JavaFX с GluonHQ и следовал их инструкциям о том, как начать работу .enter image description here Несмотря на то, что обе обязательные переменные установлены правильно в ~ / .bash_profile, mqtt-spy-1.0.0.jar по-прежнему возвращает сообщение об ошибке, показанное на первом скриншоте ...

Что еще мне нужно сделать или что мне нужно сделать по-другому для запуска mqtt-spy?

1 Ответ

0 голосов
/ 03 декабря 2018

Уже есть проблема , поданная по этому поводу, но не решение.

Я действительно не пытался заставить его работать полностью, но это необходимые шаги для запускаjar на Java 11, который требует JavaFX 11, но не связывает его:

  1. Перейдите на OpenJFX docs и прочитайте о том, как начать работу с JavaFX 11.

  2. Загрузите JavaFX 11 для вашей платформы с здесь .Распакуйте его

  3. При условии, что у вас установлена ​​Java 11 и задано значение JAVA_HOME:

С mqtt-spy-1.0.0.jar (как последняя версия )), вы можете запустить:

java --module-path /path-to/javafx-sdk-11.0.1/lib \
    --add-modules javafx.controls,javafx.fxml -jar mqtt-spy-1.0.0.jar

После запуска вы получите это исключение:

Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)

Начиная с Java 9, JAXB также не является частью JDK,Таким образом, вы можете добавить попытку загрузить зависимость из здесь ) и добавить ее в путь к классам.Но это займет несколько итераций (есть еще несколько необходимых jar-файлов, см. this ).

Так почему бы вам не использовать последний снимок available ,это включает в себя зависимости: mqtt-spy-1.0.1-beta-b18-jar-with-dependencies.jar.

При этом:

java --module-path /path-to/javafx-sdk-11.0.1/lib \
    --add-modules javafx.controls,javafx.fxml -jar mqtt-spy-1.0.1-beta-b18-jar-with-dependencies.jar

Я получаю:

mqtt-spy on 11

Предупреждение : Но это не значит, что приложение будет работать полностью.Учитывая, что это приложение Java 8, в JavaFX 11 произошли некоторые изменения, связанные в основном со скинами управления.Если приложение использовало закрытый API (com.sun.javafx ....), это не будет работать сейчас, потому что оно было перемещено в общедоступные пакеты или потому, что оно недоступно для модулей.Для последнего вы можете использовать --add-opens, но для первого нет другого решения, кроме как обновить зависимости приложения до Java 9 +.

...