【问题标题】:problems with java3D lib configurationjava3D lib配置的问题
【发布时间】:2011-05-05 03:10:29
【问题描述】:

我在配置 java3D 以使用我的 IDE 环境时遇到了一些问题...

我已经下载了 j3d-1_5_2-linux-i586.zip,并解压了 j3dcore.jar、j3dutils.jar、vecmath.jar、libj3dcore-ogl.so、libj3dcore-ogl-cg.so 并将它们全部添加为“引用”我的项目文件夹中的库。这消除了我收到的任何编译警告,但是当我编译并运行应用程序时,出现以下异常!

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)

这里也是对源代码的快速浏览。注意:一旦将导入库路径添加为引用库,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();
    }
}

我不确定我对“j3dcore-ogl”的含义是什么,但我卡在了这一点上。如何在系统环境或 IDE 项目中安装 java3D?请帮忙。

IDE:Eclipse SDK 3.5.2

JVM:java-6-sun-1.6.0.22

操作系统:Ubuntu 10.04 LTS

【问题讨论】:

    标签: java linux eclipse exception java-3d


    【解决方案1】:

    (Windows 同样的问题已解决)

    "java.library.path" = PATH = C:\Program Files (x86)\Common Files\Oracle\Java\javapath\
    (inside this folder: javaws.exe, javaw.exe,java.exe)
    

    复制:j3dcore-ogl.“dll”到这个文件夹试试!

    【讨论】:

      【解决方案2】:

      我最近遇到了同样的问题,我是这样解决的:

      运行 'strace java filename' 并在顶部附近查找类似 "open("/usr/lib/jvm/java-8-oracle/jre/bin/.. /lib/amd64/libpthread.so”,它将告诉您系统正在加载哪些二进制文件。

      就我而言,重要的是 amd64。

      返回 java3d 下载页面并下载(在本例中)amd64 版本的二进制文件并安装它。覆盖 lib/ext 中的 .so 文件(vecmath、j3dcore 和 j3dutils)。

      再次测试您的 java3d 程序,它应该可以工作。

      【讨论】:

      • 您不能将 JAR 复制到 lib/ext 中,因为当多个小程序或应用程序需要不同的不兼容版本的 Java3D(和 JOGL)并且无论如何扩展机制已从 Java 1.9 中删除时,这可能会导致冲突(即 Java 1.9 中没有 lib/ext)。您的建议是典型的不良做法。此外,无需使用最新版本的 Java 3D 手动处理本地库,无需“安装”,只需将正确的 JAR 放入应用程序的类路径中即可。将 JAR 复制到 JRE 会影响所有使用它的程序,这不是一个好主意。
      【解决方案3】:

      我遇到了这个确切的问题,我的解决方案(我使用 eclipse)是下载 32 位(i586)(来自https://java3d.java.net/binary-builds.html)存档并使用那些本地人。

      【讨论】:

      • 过时版本。而是使用 Java 3D 1.6.0。看我的回答。
      【解决方案4】:

      已解决 - JonnyO 的答案是正确的。

      我在 linux 上使用 java 8,并从https://java3d.java.net/binary-builds.html 下载(采用 linux-amd64 版本的 intel 64 位系统)。

      解压下载的文件,然后解压其中的j3d-jre.zip,将jar文件添加到项目中,将libj3dcore-ogl.so添加到jar中,还是不行。我必须将 libj3dcore-ogl.so 添加到库路径中。 (我比较懒,直接复制到/usr/lib下就行了)

      现在它正在工作。

      PS:确保事先删除任何其他 j3dcore.jar 和 j3dutils.jar。

      【讨论】:

      • JohnnyO 的回答不正确,他使用的是过时的 Java3D 版本,并且您引用的网页将被删除,因为 Oracle 至少在 6 年前停止维护 Java3D 1.5。此外,将原生库放入 /usr/lib 可能会破坏使用 Java Webstart 和/或小程序的应用程序(如果它们使用其他版本的 Java3D),因为您过时的原生库将被优先加载,从而违背了设置库路径的目的。
      【解决方案5】:

      我知道这是一个非常古老的问题,但一些开发人员仍在安装 Java 3D 的过时版本,无论有没有 IDE,它都更难使用。请宁愿使用 Java 3D 1.6.0 并按照我提供的详细说明(英文和法文)here

      【讨论】:

      • 和 maven 我们在哪里可以找到工件?
      • 最新版本的 Java3D 不在 Maven Central 上,但我们计划今年将 Java3D 1.7.0 放入其中。
      • @gouessej:有没有发生过这种情况?
      • @JonasVautherin 请在 Java3D 部分的官方 JogAmp 论坛上向 Phil 提出这个问题:forum.jogamp.org/java3d-f3728156.html 据我所知,它还没有在 Maven Central 上,但如果你要求它,它会可能会促使菲尔上传它;)说真的,如果它对您有用,请礼貌地请求它,这不会有问题。前段时间另一位用户提出要求。
      【解决方案6】:

      作为给定答案的附录,帮助我设置 java 3d 的是: 将所有 .dll 文件从“C:\Program Files\Java\Java3D\1.5.X\bin\”复制并粘贴到“C:\Program Files\Java\jre6\bin\”。 因此,将 Java3D 转换为我的实际 jre6(从 bin 到 bin)。

      之前我也设置了classpath/(你也可以设置path)为 3dcore.jar、j3dutils.jar、vecmath.jar、j3dcore-ogl.dll 但仍然没有工作。

      复制过去 j3dcore-ogl.dll(如上所述)并将类路径留给 3dcore.jar、j3dutils.jar、vecmath.jar(在“C:\Program Files\Java\Java3D\1.5.X\ext\”中) 它工作得很好。

      我在这里找到了帮助:http://www.xinapse.com/Manual/install_windows.html 看第2点。

      最好的问候

      【讨论】:

      • 这是一个非常糟糕的主意。如果您将本机库复制到 JVM 中而不是设置 Java 库路径,您将使用不同版本的 Java 3D 和/或 JOGL 破坏所有小程序和 Java 应用程序。此外,您使用的是过时的版本。而是使用 Java 3D 1.6.0。看我的回答。使用最新版本的 Java 3D 无需手动处理原生库。
      • @gouessej 谢谢你的评论。是的,我的版本已经过时,但它仍然有效,直到现在我还没有遇到任何问题。无论如何,我将按照您的建议将其更改为 1.6.0,以避免将来出现任何问题。同样正如我所提到的,我离开了我的类路径集。我想说你在博客上写了非常好的材料:@ gouessej blogB/R
      • 它可以工作,但您不会从我们的错误修复中受益。例如,Java 3D 1.5 在带有一些 Intel (Q35 Express) 和 AMD (Radeon 3500) 驱动程序的 Windows 下简单地崩溃。当我在 JOGL 2.2 中修复了这些错误时,只有 Java 3D 1.6.0 从中受益。非常感谢您的称赞。感谢其他 JogAmp 用户的反馈,我的文章得到了很大改进。
      【解决方案7】:

      我遇到了同样的问题。解决了它设置本机路径:

      属性 - java 构建路径 - 库 - java3Dlib - 本机库位置 - 外部文件夹 -----> 找到路径:....Java/Java3D/1.5.1/bin 或文件所在的路径: j3dcore-ogl.dll

      【讨论】:

      • 过时版本。而是使用 Java 3D 1.6.0。看我的回答。使用最新版本的 Java 3D 无需手动处理原生库。
      【解决方案8】:

      试试这个代码,它对我有帮助:

        GraphicsConfiguration config =
             SimpleUniverse.getPreferredConfiguration();
      
          Canvas3D canvas3D = new Canvas3D(config);
      

      【讨论】:

        【解决方案9】:

        我知道这个问题现在已经有几年了,但这里的答案不足以让我解决这个问题。他们只提供了部分帮助。 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 编译器,选中“启用项目特定设置”,然后为您的项目选择正确的编译器合规级别。在我的例子中,它是 1.6 用于 JDK6。 (命名真的让我很困惑,至少 6 是一个暗示。)
        • 您还必须确保在运行应用程序时使用了正确的 JRE。因此打开 Run>Run Configurations 并选择标签 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 变量,请在控制面板中打开系统设置并选择高级系统设置。在底部,您会找到“环境变量”按钮。在系统变量列表中,您将找到变量“路径”。确保 j3dcore-ogl 的目录包含在路径列表中。
        • 回到 Eclipse,无论 *.jar 文件当前在哪里,请确保它们包含在您的 Project>Properties>Java Build Path>Libraries 中。您可以使用 Add JARsAdd External JARs 添加它们,具体取决于您是否将这三个 JAR 复制到项目目录中。

        6) 现在是今天拯救我的部分。

        对于 Java 构建路径中列出的每个 Java3D 库

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

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

        我相信,这些都是在 Eclipse 中设置 Java3D 必须完成的所有步骤,因为我今天在新计算机上设置了所有内容。现在我希望这些说明能够拯救一些其他可怜的 Java 初学者、学生或程序员的日子:-)

        【讨论】:

        【解决方案10】:

        project/properties/java build path/source tab/expand 并选择本地库位置/导航到 i386 文件夹。

        【讨论】:

        • 宁愿使用 Java 3D 1.6.0。由于本地库存储在一些 JAR 中,因此无需使用最新版本的 Java 3D 处理本地库位置,JOGL 会自动检测操作系统和架构,从 JAR 中提取并加载它们。
        【解决方案11】:

        我遇到了这个问题。

        下载 java3d 插件并安装就足够了。

        在您的搜索引擎中,例如 Google 搜索“java3d 插件”

        并下载并安装它。

        【讨论】:

        • 简单地再次安装插件不需要将它们添加到库路径中,或者告诉 IDE 在哪里可以找到它们。
        【解决方案12】:

        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"));
        

        【讨论】:

        • 宁愿使用 Java 3D 1.6.0。看我的回答。使用最新版本的 Java 3D 无需手动处理原生库。
        猜你喜欢
        • 1970-01-01
        • 2023-03-05
        • 2012-02-09
        • 2017-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多