macOS:如何将 JavaFX 正确安装到 运行 mqtt-spy?
macOS: how to install JavaFX properly to run mqtt-spy?
我正在尝试 运行 mqtt-spy-1.0.0.jar 在我的 macOS 10.14 系统上,但它无法启动,并返回以下错误消息:
根据开发者的说法,这个问题是系统上JavaFX is missing造成的。
最新版本的 Oracle JDK 安装在我的系统上,如下所示,但是,我知道 Oracle 在 v11 中从 JDK 中排除了 JavaFX。
所以我下载了JavaFX from GluonHQ and followed their instructions on how to get started。
尽管在 ~/.bash_profile 中正确设置了两个必需的变量,mqtt-spy-1.0.0.jar 仍然返回第一个屏幕截图中显示的错误消息 ...
我还需要做什么,或者我需要做什么不同于 运行 mqtt-spy 的事情?
已经有一个 issue 关于这个的文件,但没有解决方案。
我还没有真正尝试让它完全工作,但这些是 运行 在 Java 11 上需要 JavaFX 11 的 jar 的必需步骤,但不需要'捆绑它:
转到 OpenJFX docs 并了解如何开始使用 JavaFX 11。
从 here 下载适用于您的平台的 JavaFX 11。解压
前提是你安装了Java11,设置为JAVA_HOME:
使用 mqtt-spy-1.0.0.jar
(最新的 release),您可以 运行:
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 的一部分。所以你可以添加 try to download the dependency from here) and add it to the classpath. But this will take some iterations (there are a few other required jars more, see ).
那你为什么不使用最新的快照 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
我得到:
警告:但这并不意味着该应用程序将完全正常运行。鉴于它是一个 Java 8 应用程序,JavaFX 11 中发生了一些变化,主要与控制皮肤有关。如果该应用程序使用私有 API (com.sun.javafx...),那现在将不起作用,因为它已被移动到 public 包,或者因为它不可访问由模块。对于后者,您可以使用 --add-opens
,但对于前者,除了将应用程序依赖项更新为 Java 9+.
外,没有其他解决方案。
我正在尝试 运行 mqtt-spy-1.0.0.jar 在我的 macOS 10.14 系统上,但它无法启动,并返回以下错误消息:
根据开发者的说法,这个问题是系统上JavaFX is missing造成的。
最新版本的 Oracle JDK 安装在我的系统上,如下所示,但是,我知道 Oracle 在 v11 中从 JDK 中排除了 JavaFX。
我还需要做什么,或者我需要做什么不同于 运行 mqtt-spy 的事情?
已经有一个 issue 关于这个的文件,但没有解决方案。
我还没有真正尝试让它完全工作,但这些是 运行 在 Java 11 上需要 JavaFX 11 的 jar 的必需步骤,但不需要'捆绑它:
转到 OpenJFX docs 并了解如何开始使用 JavaFX 11。
从 here 下载适用于您的平台的 JavaFX 11。解压
前提是你安装了Java11,设置为JAVA_HOME:
使用 mqtt-spy-1.0.0.jar
(最新的 release),您可以 运行:
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 的一部分。所以你可以添加 try to download the dependency from here) and add it to the classpath. But this will take some iterations (there are a few other required jars more, see
那你为什么不使用最新的快照 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
我得到:
警告:但这并不意味着该应用程序将完全正常运行。鉴于它是一个 Java 8 应用程序,JavaFX 11 中发生了一些变化,主要与控制皮肤有关。如果该应用程序使用私有 API (com.sun.javafx...),那现在将不起作用,因为它已被移动到 public 包,或者因为它不可访问由模块。对于后者,您可以使用 --add-opens
,但对于前者,除了将应用程序依赖项更新为 Java 9+.