【问题标题】:Missing JavaFX application class when running .jar file with Java 10使用 Java 10 运行 .jar 文件时缺少 JavaFX 应用程序类
【发布时间】:2018-08-01 08:23:43
【问题描述】:

我的问题如下: 安装 Java 10 后,我无法运行使用 java 1.8 构建的 .jar 文件。

在控制台中,java -version 显示:

java版本“10.0.2” 2018-07-17 Java(TM) SE 运行时环境 18.3 (build 10.0.2+13) Java HotSpot(TM) 64 位服务器 VM 18.3(内部版本 10.0.2+13,混合模式)

当我双击 .jar 时,它没有启动,当我从控制台使用 java -jar APP.jar 运行它时,我收到以下错误: 缺少 JavaFX 应用程序类 feedmeclient.FeedMeClient

有趣的是 IT WORKS 如果我恢复到 Java 1.8 或者如果我在控制台中使用完整路径调用 java 1.8,如下所示: "C:\Program Files (x86)\Java\jre8u162\bin\java.exe" -jar APP.jar,那么就没有问题了。

APP.jar 是使用 NetBeans 8.2 构建的 Java不应该向后兼容吗?

.jar 文件包含 MANIFEST,如下所示:

Manifest-Version: 1.0
Implementation-Title: FeedMeClient
X-COMMENT: Main-Class will be added automatically by build
Implementation-Version: 1.0
Permissions: sandbox
Codebase: *
JavaFX-Version: 8.0
Class-Path: lib/CustomFXComponents.jar lib/FeedMeDataLayer.jar lib/com
 mons-io-2.4.jar
Created-By: JavaFX Packager
Implementation-Vendor: bostinac
Main-Class: feedmeclient.FeedMeClient

【问题讨论】:

  • 我尝试了一个来自docs.oracle.com/javafx/2/get_started/hello_world.htm 的简单示例 HelloWorld,使用 Java 8 构建它,导出为 Running jar(来自 eclipse),它从 Java 10.0.2 开始。我认为这不是 Java 问题。你检查过你的主类真的在罐子里吗?
  • 是的,我查过了……主课在里面。当我调用完全相同的 APP.jar 时,它与 Java 8 一起运行。更奇怪的是,我还有其他使用 1.8 构建的应用程序,这些应用程序在 java 8 和 java 10 上都可以正常工作,只有这个 APP.jar 才有,我不知道是什么。我教过它可能与库和类路径有关,但是当我将它与似乎没有这个问题的 jar 文件进行比较时,它们看起来很相似(使用相同的库,相同的类路径)。
  • 你能直接从 Netbeans 用 Ja​​va 10 启动它吗?
  • 我无法将 JDK 10 添加为 NetBeans 中的平台。似乎所需的 javafx-src.zip(平台源)和 Javadoc 文件不再位于 JDK10 安装文件夹中,因此 NetBeans 无法使用它:(.
  • 我刚刚在 NetBeans 网站上找到了这个。这是否意味着IDE有问题并且不支持Java> 8? :( "安装和运行 Java SE、Java EE 和所有 NetBeans 捆绑包需要 JDK 8。NetBeans 8.2 不能在 JDK9 上运行!您可以下载独立的 JDK 或下载带有 NetBeans IDE Java SE 捆绑包的最新 JDK。"跨度>

标签: java class javafx compatibility


【解决方案1】:

所以……经过一番挣扎,我想我找到了问题……实际上还有更多问题:

  1. Netbeans 8.2 似乎不适用于 Java 9 或 10。我按照 Ralf Renz 的建议从 netbeans.apache.org 获取了 NetBeans 9,我能够将项目加载到其中,并使用 JDK 10 进行编译。令人惊讶的是,当我在 NetBeans 中运行它时,我得到了相同的 Missing JavaFX application class feedmeclient.FeedMeClient 错误:)

    此外,IDE 也在努力扫描类并弹出您选择要使用的项目的主类的弹出窗口。对话窗口会卡住,找不到类....嗯,很奇怪。该项目没有任何错误,它编译并构建得很好。然后我开始调查使用的库。我使用了一个也使用 Java 8 构建的库,这个名为 DataLayer.jar 的库正在使用 JAXB 访问文件以写入和读取 XML 文件。

  2. 现在的主要问题:JAXB 以前一直在 Java 发行版中,但在 Java 10 中他们删除了它 :((( 有趣的是,IDE 不会抱怨,因为用作库的 DataLayer.jar 已经编译,我猜它已经包含了需要的类。但不知何故,仍然缺少一些东西,因为当我单独运行 DataLayer.jar 时,它会崩溃,因为某些 JAXB 符号无法解析。在运行时令人困惑的“Missing JavaFX 应用程序类 feedmeclient.FeedMeClient" 被抛出,即使它与问题的真正原因无关。

好消息是您可以将 JAXB 作为库并在项目中使用它。在我这样做之后,一切都恢复正常了。

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2020-10-05
    • 2020-03-13
    • 2013-01-17
    • 2016-11-05
    • 2022-01-17
    相关资源
    最近更新 更多