【问题标题】:JOGL throwing ClassNotFoundException?JOGL 抛出 ClassNotFoundException?
【发布时间】:2013-07-31 19:31:42
【问题描述】:

我已经看到这个问题在这个网站上提出了几次,但从未真正看到一个明确的答案,所以请原谅我重复它。在使用 JOGL 和 Java3D 进行编程时,我遇到了一些错误。我正在尝试创建一个最终可能会在 Android App Store 上发布的项目。我只是使用 Java3D 和 JOGL 开始了这个项目,并将它们放在我的 mac 上的系统库中,在那里它们运行良好。然后为了使项目具有可移植性,我将 J3D 和 JOGL 文件移到了项目中,这样它们就可以编译成无需安装 j3d 和 JOGL 即可运行的 jar 文件。但是每次我运行项目时都会抛出这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/opengl/GL
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at javax.media.j3d.Pipeline$PipelineCreator.run(Pipeline.java:73)
    at javax.media.j3d.Pipeline$PipelineCreator.run(Pipeline.java:61)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.media.j3d.Pipeline.createPipeline(Pipeline.java:90)
    at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:832)
    at javax.media.j3d.VirtualUniverse.<clinit>(VirtualUniverse.java:274)
    at javax.media.j3d.GroupRetained.<init>(GroupRetained.java:155)
    at javax.media.j3d.TransformGroupRetained.<init>(TransformGroupRetained.java:116)
    at javax.media.j3d.TransformGroup.createRetained(TransformGroup.java:114)
    at javax.media.j3d.SceneGraphObject.<init>(SceneGraphObject.java:114)
    at javax.media.j3d.Node.<init>(Node.java:172)
    at javax.media.j3d.Group.<init>(Group.java:549)
    at javax.media.j3d.TransformGroup.<init>(TransformGroup.java:87)
    at src.Project.<clinit>(Project.java:47)
    at src.ProjectPanel.<clinit>(ProjectPanel.java:8)
Caused by: java.lang.ClassNotFoundException: javax.media.opengl.GL
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 17 more

我使用 Eclipse 作为 IDE,在项目的类路径中有 jogl-all.jargluegen-rt.jar 文件,以及所有需要的 j3d jar,但它找不到 GL.class 文件某种原因。

提前感谢您的帮助。

【问题讨论】:

    标签: eclipse macos noclassdeffounderror jogl java-3d


    【解决方案1】:

    当您将应用程序导出为 Runnable JAR 时,请使用 +图书馆处理: 将所需的库复制到生成的 JAR 旁边的子文件夹中 或者 +图书馆处理: 将所需的库打包到生成的 JAR 中

    更多信息请参见 jogamp jogl wiki: http://jogamp.org/wiki/index.php/Setting_up_a_JogAmp_project_in_your_favorite_IDE http://jogamp.org/wiki/index.php/JogAmp_JAR_File_Handling

    您还需要使用 java -jar yourapp.jar 命令行选项来运行您的应用程序。

    【讨论】:

    • 我还没有将它导出到 JAR 文件中,但是当我尝试按照您所说的进行操作时,它会显示:Catched URISyntaxException: Expected scheme-specific part at index 5: rsrc:, while TempJarCache.bootstrapNativeLib() of null (null + gluegen-rt-natives-macosx-universal.jar) Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /System/Library/Frameworks/gluegen-rt.Framework/gluegen-rt
    • 您需要将gluegen-rt-natives* 和jogl-all-natives* 包含到您想要支持的所有平台的eclipse 项目中,以便让eclipse 将它们包含在导出的项目中。这在 Setting_up_a_JogAmp_project_in_your_favorite_IDE 和 JogAmp_JAR_File_Handling 中提到了另外请仔细检查系统文件夹中是否没有任何旧版本的 jogl 和 j3d,jogamp 仅建议在您的应用程序中部署 jogl 和 j3d。
    • 我在 eclipse 项目类路径中都有这两个文件,现在用于 osx,一旦我在 osx 上运行,我将添加其他平台的文件
    • 仔细检查系统文件夹中没有任何版本的gluegen jogl和j3d:/System/Library/Frameworks/gluegen-rt.Framework/gluegen-rt
    • 哇,谢谢,我猜我的系统库中还剩下一些 java3d 文件。我现在感觉很愚蠢,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多