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

如何让Java3D在OS X上的IntelliJ中工作,java,macos,intellij-idea,java-3d,Java,Macos,Intellij Idea,Java 3d,我是一名计算机科学专业的学生,我需要让Java3D在我的mac上工作,这样我就可以完成必修的作业 我使用IntelliJ作为我的IDE,它非常适合Java和Python。但我正在努力让它为Java3D工作 我试过用我的谷歌浏览器,但没有用。所以我来这里寻求一些指导。我尝试过多个教程/指南,以下是我尝试过的内容: 我试图运行的代码来自 我尝试的第一件事是安装Java3d Jar并将其添加到依赖项中:我从: 但我得到了一个错误: Exception in thread "J3D-Renderer-1

我是一名计算机科学专业的学生,我需要让Java3D在我的mac上工作,这样我就可以完成必修的作业

我使用IntelliJ作为我的IDE,它非常适合Java和Python。但我正在努力让它为Java3D工作

我试过用我的谷歌浏览器,但没有用。所以我来这里寻求一些指导。我尝试过多个教程/指南,以下是我尝试过的内容:

我试图运行的代码来自

我尝试的第一件事是安装Java3d Jar并将其添加到依赖项中:我从:

但我得到了一个错误:

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
然后我知道java3d已经安装在mac上了,我也这么做了。我将jar添加到依赖项中。但我也犯了同样的错误

我最后一次尝试是遵循以下指南:

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

现在,这可能都是我的错,我不确定是否必须将它们添加到依赖项中,然后添加新的JAR,但当我添加不同类型的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

你没有按照我的指示去做,答案是肯定的。在安装新版本之前,必须卸载过时的Java3D版本。如果不这样做,JVM将始终优先加载直接复制到JVM中的或作为扩展安装的JVM,这在OSX下通常是如此

完成后,安装JogAmp和Java3D,只需按照说明进行操作,非常简单。此外,如本教程所述,您应该在我们的网站上询问有关Java3D的问题。JogAmp贡献者不能在任何地方注册,在Reddit上,在这里

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


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

您不能只使用支持3D的JavaFX吗?它是从Java8开始的标准库的一部分。@icza我一直试图理解它,但它看起来非常复杂。但话说回来,我只是匆匆瞥了它一眼。我可能再给它一次机会。但是如果我能让java3d工作,我会更喜欢它。我的老师使用它,我的朋友可能也会使用它。因此,如果我在某件事情上挣扎,我可以从他们那里得到帮助,而不是通过谷歌搜索,希望有人和我有同样的问题P@icza你的回答离题了。我受够了那些宣传API而不提供帮助的人。JavaFX3DAPI有一些优点和缺点,它有更高的最低要求,更高的内存占用,它的性能在不同平台之间不一致,并且它的特性比大多数用Java编写的scenegraph API少得多。实际上,如果您真的想使用更强大的scenegraph API,请使用JogAmp的Ardor3D Continuation或JMonkeyEngine。@gouessej无需生气。首先,我没有发布任何答案,我只是发表评论。评论可以是任何东西。第二,标准库不是我的API。我和甲骨文没有任何联系。我提出了一些可能会解决提问者最初的问题的建议,即他无法启动3D库,如果他使用JavaFX,3D库一开始就不存在,因为它是JRE8的一部分。由于其他信息,例如他想使用3D库做什么,没有发布,所以不清楚他到底为什么想要那个库,所以我建议了一个无故障的替代方案。没有无故障的替代方案,即使使用标准的JavaAPI(J2SE的一部分)最初比使用第三方库更容易,因为没有什么可安装的。因此,提问者在安装java 3D时请求帮助,他不要求使用哪个3D库,这就是为什么我认为你的评论是偏离主题的原因。因此,除非图书馆没有解决方案,否则人们应该避免建议使用其他图书馆。如果你的车有问题,建议你从另一家汽车制造商那里再买一辆,而不是修理它是没有用的。我试过了,但这次我又犯了一个错误。我已经编辑了主帖子并添加了错误。很抱歉,另一个错误与此类似,并且具有相同的根本原因。您的机器上的某个地方仍然默认安装了旧版本的Java3D,或者您错误地使用了Oracle JARs,因为Java3
D 1.6.0最新版本没有在apple/awt中使用类,而Java3D 1.5使用类。只要你遇到这种错误,你就必须在你的机器上寻找一个过时的Java3D版本,正如我在这里解释的那样:我建议你删除所有JAR,即使是你下载的JAR,要在您的机器上查找Java3D并删除您在其他地方找到的所有Java3D JAR,以避免任何混淆,并开始在干净的机器上工作。然后,按照我的指示去做,它就会起作用。如果您仍然收到相同的错误,这意味着您的机器上仍然有一个过时的Java3D版本。我更新了我的教程,以澄清如何卸载过时的Java3D版本,但不要将JAR放在同一目录中,这正是我的教程中不鼓励做的,这是有原因的。在Java 3D 1.6.0 pre 12的下一次预构建中,不会与Mac下的JOGL 1产生任何混淆,因为它将使用JOGL 2.3.1,它使用不同的包名:享受:
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