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 的必需步骤,但不需要'捆绑它:

  1. 转到 OpenJFX docs 并了解如何开始使用 JavaFX 11。

  2. here 下载适用于您的平台的 JavaFX 11。解压

  3. 前提是你安装了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+.

外,没有其他解决方案。