java3D lib配置问题

JB8*_*B87 11 java eclipse linux java-3d exception

我遇到了一些麻烦,配置java3D以适应我的IDE环境......

我已经下载了j3d-1_5_2-linux-i586.zip,并解压缩了j3dcore.jar,j3dutils.jar,vecmath.jar,libj3dcore-ogl.so,libj3dcore-ogl-cg.so并将它们全部添加为"Referenced Libraries"我的项目文件夹.这摆脱了我得到的任何编译警告但是当我编译并运行应用程序时,我得到以下异常!

Exception in thread "main" java.lang.UnsatisfiedLinkError: no j3dcore-ogl in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
    at java.lang.Runtime.loadLibrary0(Runtime.java:840)
    at java.lang.System.loadLibrary(System.java:1047)
    at javax.media.j3d.NativePipeline$1.run(NativePipeline.java:231)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.media.j3d.NativePipeline.loadLibrary(NativePipeline.java:200)
    at javax.media.j3d.NativePipeline.loadLibraries(NativePipeline.java:157)
    at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:987)
    at javax.media.j3d.VirtualUniverse.<clinit>(VirtualUniverse.java:299)
    at Hello3d.<init>(Hello3d.java:10)
    at Hello3d.main(Hello3d.java:18)
Run Code Online (Sandbox Code Playgroud)

这里也快速浏览一下源代码.注意:一旦将Eclipse添加为Referenced Libraries,Eclipse就会使用Ctrl + Shift + O自动拉入导入库路径.

import javax.media.j3d.BranchGroup;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不确定我对'j3dcore-ogl'有什么意义但是我坚持这一点.如何在系统环境或IDE项目中安装java3D?请帮忙.

IDE:Eclipse SDK 3.5.2

JVM:java-6-sun-1.6.0.22

操作系统:Ubuntu 10.04 LTS

小智 23

我知道这个问题现在已经有几年了,但是这里的答案还不足以让我解决这个问题.他们只是部分帮助.http://www.filsa.net/2008/07/17/eclipse-java3d-and-javalibrarypath/也有点帮助,但仍然不够.因此,我觉得有必要编写一份完整的清单,让Java3D在Eclipse中运行.

几个月前,我已经遇到了同样的问题,我在不明白我做了什么的情况下解决了这个问题.今天我想在不同的计算机上设置我的环境并猜测是什么,我又遇到了同样的问题.我忘记了我必须做的事情......但是,这次我更系统地解决了问题,现在我理解了每一步.

解决方案 - 每一步都很详细

1)如果要导入其他人的项目,请确保在Eclipse中安装并选择了正确的JDK和JRE.我的Eclipse选择了最新的JRE 7.我唯一安装过的.但是我工作的项目需要JDK 6和JRE 6.如果你需要有多个java版本,我建议在你的文件系统上使用以下结构

  • somePath /的Java/JDK/JDK6 /
  • somePath /的Java/JDK/JDK7 /
  • somePath /的Java/JRE/JRE6 /
  • somePath /的Java/JRE/JRE7 /
  • somePath /的Java/Java3D的/

2)Eclipse中,您必须执行以下步骤以选择正确的JDK和JRE.

  • 单击项目>属性> Java编译器,选中"启用项目特定设置",然后为项目选择正确的编译器合规性级别.在我的情况下,使用JDK61.6.(命名对我来说真的很混乱,至少6是暗示.)
  • 您还必须确保在运行应用程序时使用了正确的JRE.因此,请打开"运行">"运行配置",然后选择选项卡JRE.如果使用JDK 6,则必须确保使用JRE 6.如果单击"已安装的JRE"然后添加somePath/Java/JRE/JRE6 /目录,则可以添加JRE.

3)正确设置Java环境,确保在您的计算机上安装了Java3D.你不能对此做错任何事.

4)在Java3D安装目录中,找到文件

  • j3dcore-ogl.dll(对于Windows;在Linux上是j3dcore-ogl.so)
  • j3dcore.jar
  • j3dutils.jar
  • vecmath.jar

如果您正确设置环境,这些文件的位置无关紧要,我将解释.因此,如果需要,可以将这些文件复制到项目目录中,以便在一个地方拥有所需的一切.

5)找到这些文件后,请确保

  • 在操作系统上,j3dcore-ogl.dll的位置将添加到PATH变量中..dll或.so文件包含Java3D使用的机器本机代码.您的系统需要了解此代码的存在.在Windows下,要设置PATH变量,请在"控制面板"中打开"系统设置",然后选择"高级系统设置".在底部,您将找到"环境变量"按钮.在"系统变量"列表中,您将找到变量"Path".确保j3dcore-ogl的目录包含在路径列表中.
  • 回到Eclipse,无论*.jar文件当前在哪里,请确保它们包含在Project> Properties> Java Build Path> Libraries中.您可以使用Add JARsAdd External JARs添加它们,具体取决于您是否将三个JAR复制到项目目录中.

6)现在是今天救了我一天的部分.

对于Java Build Path中列出的每个Java3D库

  • j3dcore.jar
  • j3dutils.jar
  • vecmath.jar,

您需要指定本机库位置.Native库是j3dcore-ogl.dll,因此编辑本机库位置以指向包含j3dcore-ogl.dll的目录.

我相信,这些都是在eclipse中设置Java3D所必须采取的步骤,因为我今天在一台新电脑上设置了所有内容.现在我希望这些说明可以节省一些其他可怜的Java初学者,学生或程序员的日子:-)


Joh*_*nyO 7

Java抱怨,因为它无法在Java3D附带的系统路径上找到本机库(*.so文件).具体如何解决这个问题取决于你.您可以执行以下任何操作之一:

1)确保您的系统路径包含Java3D提供的*.so文件

2)设置LD_LIBRARY_PATH环境变量:export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ usr/lib /"path-to-java3d-libraries"/

3)执行java时设置java.library.path:java -Djava.library.path = $ LD_LIBRARY_PATH:/ usr/lib /"path-to-java3d-libraries"/

为确保正确设置,请将以下内容添加到Java代码中,并确保报告的路径包含其上的共享库

System.out.println("LD Library Path:" + System.getProperty("java.library.path"));
Run Code Online (Sandbox Code Playgroud)