我正在尝试运行 mqtt-spy-1.0.0.jar在我的 macOS 10.14 系统上,但它无法启动,返回以下错误消息:
根据开发者的说法,这个问题是由 JavaFX is missing 引起的。在系统上。
我的系统上安装了最新版本的 Oracle JDK,如下所示,但是,我知道 Oracle 在 v11 中已将 JavaFX 从 JDK 中排除。 所以我下载了JavaFX from GluonHQ并按照他们的指示 on how to get started 。 尽管在 ~/.bash_profile 中正确设置了两个必需的变量,mqtt-spy-1.0.0.jar 仍然返回第一个屏幕截图中显示的错误消息...
我还需要做什么或者需要做什么不同的事情才能运行 mqtt-spy?
最佳答案
已经有一个issue对此提出了相关要求,但没有解决方案。
我并没有真正尝试让它完全工作,但这些是在需要 JavaFX 11 但不捆绑它的 Java 11 上运行 jar 所需的步骤:
转到OpenJFX docs并了解如何开始使用 JavaFX 11。
从 here 下载适合您平台的 JavaFX 11 。解压它
假设您已安装 Java 11,并设置为 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 的一部分。所以你可以添加尝试从here下载依赖)并将其添加到类路径中。但这需要一些迭代(还有一些其他必需的 jar,请参阅 this)。
那么为什么不使用最新的快照 available ,其中包括依赖项:mqtt-spy-1.0.1-beta-b18-jar-with-dependency.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 中发生了一些变化,主要与控件皮肤相关。如果应用程序使用私有(private) API (com.sun.javafx...),那么现在将无法工作,因为它已被移至公共(public)包,或者因为模块无法访问它。对于后者,您可以使用 --add-opens
,但对于前者,除了将应用程序依赖项更新到 Java 9+ 之外,没有其他解决方案。
关于macOS:如何正确安装 JavaFX 来运行 mqtt-spy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53584781/