Windows7运行Java3D出现JNI错误NoClassDefFoundError: Canvas3D求助
Java3D 运行 NoClassDefFoundError 问题排查方案
现有环境配置
OS: Windows 7 64-bit Java: C:\Program Files\Java\jdk1.8.0_202 [Installed jdk-8u202-windows-x64.exe] Java 3d: C:\Program Files\Java\Java3D\1.5.1 [Installed java3d-1_5_1-windows-amd64.exe] 环境变量配置: JAVA_HOME C:\Program Files\Java\jdk1.8.0_202 JRE_HOME C:\Program Files\Java\jdk1.8.0_202\jre PATH=%PATH%:C:\Program Files\Java\jdk1.8.0_202\bin;C:\Program Files\Java\Java3D\1.5.1\bin;C:\Program Files\Java\Java3D\1.5.1\lib; 已操作配置:将j3d相关jar包[j3dcore.jar、j3dutils.jar、vecmath.jar]复制到C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext目录,将j3dcore-ogl.dll复制到C:\Program Files\Java\jdk1.8.0_202\bin目录。
报错信息
D:\JavaSample>java HelloJava3D Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/j3d/Canvas3D at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.lang.Class.privateGetMethodRecursive(Unknown Source) at java.lang.Class.getMethod0(Unknown Source) at java.lang.Class.getMethod(Unknown Source) at sun.launcher.LauncherHelper.validateMainClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) Caused by: java.lang.ClassNotFoundException: javax.media.j3d.Canvas3D at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 7 more
排查解决步骤
- 新增CLASSPATH环境变量:你当前仅配置了PATH变量,Java的PATH仅用于定位java、javac等可执行程序,加载类和jar包依赖CLASSPATH变量,逻辑类似C++的头文件、库文件搜索路径。CLASSPATH变量值设置为
.;%JAVA_HOME%\jre\lib\ext\j3dcore.jar;%JAVA_HOME%\jre\lib\ext\j3dutils.jar;%JAVA_HOME%\jre\lib\ext\vecmath.jar,开头的.代表当前运行目录,必须保留,否则会找不到你本地编译的HelloJava3D类。 - 验证配置生效:修改完环境变量后必须重新打开cmd窗口,执行
echo %CLASSPATH%确认配置的路径正常输出,再执行运行命令测试。 - 排查架构不匹配问题:你安装的64位JDK和64位Java3D架构一致,JNI报错是类加载失败触发的衍生错误,根因还是Canvas3D类找不到,解决类路径问题后JNI报错会自动消失。
- 手动指定类路径快速验证:如果不想修改全局环境变量,可以直接在运行命令中指定jar包路径,进入D:\JavaSample目录后执行:
java -cp ".;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\*" HelloJava3D - 检查jar包完整性:确认
C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext目录下三个j3d的jar包没有损坏、文件大小和Java3D安装目录下的原始文件一致,避免复制过程中文件损坏。
内容的提问来源于stack exchange,提问作者preethi selvaraju
相关产品推荐
相关产品推荐

