You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JNI错误与JavaFX类缺失:Java版本匹配后仍报错是否需升级至Java8以上?

问题:Java项目迁移后启动报NoClassDefFoundError: Stage错误

将旧机器上可正常运行的Java项目迁移到新环境后启动报错,执行启动命令及报错信息如下:

启动命令:

[slick_57@slicks-pc ~/CustInfoOutline]$  /usr/bin/env /usr/lib/jvm/java-8-openjdk/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:44419 -cp /home/slick_57/.config/Code\ -\ OSS/User/workspaceStorage/7e2f391c1a6881bc9c3688d73bd45c15/redhat.java/jdt_ws/CustInfoOutline_e6fdbd3c/bin Driver 

报错信息:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: Stage
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Caused by: java.lang.ClassNotFoundException: Stage
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        ... 7 more

已确认java、javac版本与IDE选中的runtime一致,当前IDE的runtime配置如下:

{
"java.configuration.runtimes": [

{
    "name": "JavaSE-1.8",
    "path": "/usr/lib/jvm/java-8-openjdk",
    "default": true
},
{
    "name": "JavaSE-11",
    "path": "/usr/lib/jvm/java-11-openjdk",
},
]
}

该项目此前在更高版本Java环境运行,怀疑问题与Java版本相关,寻求解决建议。


解决建议

错误原因分析

Stage是JavaFX的核心类,Java 8中Oracle JDK默认包含JavaFX,但OpenJDK 8的部分发行版可能未预装JavaFX;而Java 11及以上版本中,JavaFX已从JDK中分离,需要单独引入依赖。当前报错是因为运行时无法找到JavaFX相关类。

具体解决步骤

  • 检查并安装OpenJFX 8
    查看/usr/lib/jvm/java-8-openjdk/lib目录下是否存在jfxrt.jar,若不存在,根据系统包管理器安装OpenJFX 8:

    • Debian/Ubuntu:执行sudo apt install openjfx
    • CentOS/RHEL:执行sudo yum install openjfx
  • 启动时手动添加JavaFX到类路径
    确认存在jfxrt.jar后,修改启动命令,将该jar包加入classpath:

    /usr/bin/env /usr/lib/jvm/java-8-openjdk/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:44419 -cp "/home/slick_57/.config/Code - OSS/User/workspaceStorage/7e2f391c1a6881bc9c3688d73bd45c15/redhat.java/jdt_ws/CustInfoOutline_e6fdbd3c/bin:/usr/lib/jvm/java-8-openjdk/lib/jfxrt.jar" Driver
    
  • 切换到原高版本Java环境
    若项目原本在Java 11+运行,直接在IDE中将默认runtime切换为JavaSE-11,同时确保项目已正确引入JavaFX依赖:

    • Maven项目需在pom.xml中添加JavaFX的依赖坐标
    • Gradle项目需在build.gradle中配置JavaFX依赖
  • 检查编译配置一致性
    确认IDE中项目的编译级别与选中的runtime版本完全匹配,避免编译时使用了高版本Java特性,运行时用低版本Java导致兼容问题。


内容的提问来源于stack exchange,提问作者slick_57

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:10:39