我是一名计算机科学专业的学生,我需要让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
答案 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。