如何让Java3D在OS X上的IntelliJ中工作

时间:2014-10-15 08:49:46

标签: java macos intellij-idea java-3d

我是一名计算机科学专业的学生,​​我需要让Java3D在我的Mac上工作,以便我可以执行强制性任务。

我使用IntelliJ作为我的IDE,它适用于Java和Python。但我正在努力使其适用于Java3D。

我尝试过使用我的google-fu但无济于事。所以我来这里寻求一些指导。我尝试了多个教程/指南,这是我尝试过的:

我尝试运行的代码来自http://www.java3d.org/starting.html

import com.sun.j3d.utils.universe.SimpleUniverse;

import com.sun.j3d.utils.geometry.ColorCube;

import javax.media.j3d.BranchGroup;

public class Hello3d {

    public Hello3d(){

    SimpleUniverse universe = new SimpleUniverse();

    BranchGroup group = new BranchGroup();

    group.addChild(new ColorCube(0.3));

    universe.getViewingPlatform().setNominalViewingTransform();

    universe.addBranchGraph(group);

    }

public static void main( String[] args ) {

    new Hello3d();

    }

}

我尝试的第一件事是安装Java3d Jar并将它们添加到依赖项中:(我从以下地址获取它们:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-client-419417.html#java3d-1.5.1-oth-JPR

但是我得到了错误:

Exception in thread "J3D-Renderer-1" java.lang.NoClassDefFoundError: apple/awt/ComponentModel
    at com.sun.opengl.impl.JAWT_DrawingSurface.GetDrawingSurfaceInfo0(Native Method)
    at com.sun.opengl.impl.JAWT_DrawingSurface.GetDrawingSurfaceInfo(JAWT_DrawingSurface.java:56)
    at com.sun.opengl.impl.macosx.MacOSXOnscreenGLDrawable$1.run(MacOSXOnscreenGLDrawable.java:165)
    at java.security.AccessController.doPrivileged(Native Method)
    at  com.sun.opengl.impl.macosx.MacOSXOnscreenGLDrawable.lockSurface(MacOSXOnscreenGLDrawable.java:163)
    at com.sun.opengl.impl.macosx.MacOSXOnscreenGLContext.makeCurrentImpl(MacOSXOnscreenGLContext.java:57)
    at com.sun.opengl.impl.GLContextImpl.makeCurrent(GLContextImpl.java:134)
    at javax.media.j3d.JoglPipeline$QueryCanvas.doQuery(JoglPipeline.java:9049)
    at javax.media.j3d.JoglPipeline.getBestConfiguration(JoglPipeline.java:8797)
    at javax.media.j3d.Renderer.doWork(Renderer.java:514)
    at javax.media.j3d.J3dThread.run(J3dThread.java:275)
Caused by: java.lang.ClassNotFoundException: apple.awt.ComponentModel
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 11 more

然后我了解到mac3d已经安装在mac上,我做了同样的事情。我将jar添加到我的依赖项中。但我得到了同样的错误。

我的最后一次尝试是遵循本指南:http://gouessej.wordpress.com/2012/08/01/java-3d-est-de-retour-java-3d-is-back/

我下载了jar,将它们全部放在同一个文件夹中,并将它们添加到我的依赖项中。但是,我又得到了同样的错误。

现在,这可能完全是我的错(我不确定是否必须将它们添加到我的依赖项然后添加新的Jars,但它总是在我添加不同类型的API时工作)或者它可能更复杂。希望你们中的一些人遇到同样的问题,可以帮助我。

提前致谢。


编辑:在尝试了gouessej所说的之后,我收到了这个错误:

JavaVM WARNING: JAWT_GetAWT must be called after loading a JVM 
AWT not found
Exception in thread "main" java.lang.NoClassDefFoundError: apple/awt/CGraphicsDevice
    at javax.media.j3d.GraphicsConfigTemplate3D.<clinit>(GraphicsConfigTemplate3D.java:55)
    at com.sun.j3d.utils.universe.SimpleUniverse.getPreferredConfiguration(SimpleUniverse.java:368)
    at com.sun.j3d.utils.universe.Viewer.<init>(Viewer.java:348)
    at com.sun.j3d.utils.universe.Viewer.<init>(Viewer.java:298)
    at com.sun.j3d.utils.universe.SimpleUniverse.<init>(SimpleUniverse.java:215)
    at com.sun.j3d.utils.universe.SimpleUniverse.<init>(SimpleUniverse.java:177)
    at com.sun.j3d.utils.universe.SimpleUniverse.<init>(SimpleUniverse.java:88)
    at MAIN.<init>(MAIN.java:22)
    at MAIN.main(MAIN.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.lang.ClassNotFoundException: apple.awt.CGraphicsDevice
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 14 more

1 个答案:

答案 0 :(得分:0)

您没有按照我的说明操作,答案在the "troubleshooting" section。您必须在安装新版本之前卸载过时版本的Java3D 。如果你不这样做,JVM将始终优先加载一个脏的复制到它或作为扩展安装的那个,这通常是OS X下的情况。

完成后,安装JogAmp和Java3D,只需按照说明操作即可,非常简单。此外(如教程中所述),您应该在official forum上询问有关Java3D的问题。 JogAmp的贡献者无法在Reddit的任何地方注册,这里......

IntelliJ可能允许将一些JAR放入类路径中,这应该不难。

警告:切换回Java for OS X(Apple JVM 1.6)是一个糟糕的解决方案,因为如果你不卸载它,它的JRE仍会选择过时版本的Java3D(1.5), Apple Java is deprecated ,您不会受益于Java3D 1.6中包含的错误修复,当您的操作系统不再支持Apple Java时,您的应用程序将无法运行,例如升级。在OS X下与OpenJDK和Oracle Java 1.8兼容的唯一Java3D版本是Java3D 1.6.0。