gpt4 book ai didi

java - 从 jar 运行 opengl jogamp

转载 作者:行者123 更新时间:2023-12-02 05:29:19 24 4
gpt4 key购买 nike

我已经编写了一个使用 opengl 的程序,我一直在 eclipse 中运行而没有出现问题,现在我想将其打包到 jar 中进行部署。

我使用 Maven 来管理所有依赖项和构建过程。我已经完成了清理和打包来构建一个具有所有必要依赖项的 jar,但我在让它实际运行时遇到了困难。

它似乎正在寻找jar文件之外的文件,例如gluegen-rt.dll,我可以看到它位于顶层的jar中。它似乎还试图引用我的 jar 的一个版本,名称后附加有“-natives-windows-amd64”。

当我尝试运行它时,出现以下错误:

D:\My Documents\workspace\Cube\target>java -jar cube-0.0.1-SNAPSHOT-jar-with-dependencies.jar 10 OPENGL
Catched FileNotFoundException: D:\My Documents\workspace\Cube\target\cube-0.0.1-SNAPSHOT-jar-with-dependencies-natives-windows-amd64.jar (The system cannot find the file specified), while addNativeJarLibsImpl(classFromJavaJar class com.jogamp.common.os.Platform, classJarURI jar:file:/D:/My%20Documents/workspace/Cube/target/cube-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/com/jogamp/common/os/Platform.class, nativeJarBaseName
cube-0.0.1-SNAPSHOT-jar-with-dependencies-natives-windows-amd64.jar): [ file:/D:/My%20Documents/workspace/Cube/target/cube-0.0.1-SNAPSHOT-jar-with-dependencies.jar -> file:/D:/My%20Documents/workspace/Cube/target/ ] + cube-0.0.1-SNAPSHOT-jar-with-dependencies-natives-windows-amd64.jar -> slim: jar:file:/D:/My%2520Documents/workspace/Cube/target/cube-0.0.1-SNAPSHOT-jar-with-dependencies-natives-windows-amd64.jar!/
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: D:\My Documents\workspace\Cube\target\gluegen-rt.dll
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:551)
at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:64)
at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:96)
at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:414)
at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:388)
at com.jogamp.common.os.Platform$1.run(Platform.java:209)
at java.security.AccessController.doPrivileged(Native Method)
at com.jogamp.common.os.Platform.<clinit>(Platform.java:179)
at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:83)
at ui.jogl.JOGLCube.init(JOGLCube.java:52)
at ui.jogl.JOGLCube.<init>(JOGLCube.java:44)
at ui.jogl.JOGLCubeController.<init>(JOGLCubeController.java:19)
at core.Cube.getVirtualCube(Cube.java:37)
at core.Cube.<init>(Cube.java:27)
at core.Cube.main(Cube.java:56)

我之前没有使用 OpenGL 的经验,因此我们将不胜感激。

感谢您的阅读

最佳答案

您将无法在单个 jar 中获取您的应用程序。 JOGL 是一个相当复杂的库,由多个 jar(以及可选的 DLL)组成,必须正确安装在与应用程序 jar 相同的文件夹中。

我不知道如何在 Eclipse 中进行设置(我的经验是 Netbeans,IMO 是一个更强大的构建环境),但问题是没有找到 JOGL native 部分的 DLL。 JOGL使用了一种有点疯狂的方法:DLL被打包在jar文件中,库在运行时动态地扩展它们,然后附加它们。您的架构的此文件的名称是 jogl-all-natives-windows-amd64.jar。一般来说,您应该将所有这些名称格式为 jogl-all-natives-*.jar 的 jar 放在与应用的 jar 文件相同的目录中。

上述问题是您的应用程序的用户必须在可以加载 DLL 的位置具有写入权限。这可能与许多企业安全策略(例如通过 Active Directory 推送强制执行)冲突。如果你有广泛的用户群体,这不会对足够多的用户造成严重的痛苦。我一直在开发的应用程序必须在国际学校中运行。一体式 JAR 机制无法用于此目的。

另一种方法是使用 jogamp 发行版的 lib 文件夹中的单独 native DLL,将它们放在 java 上的 lib 目录中应用程序的.library.path

在所有情况下,您都需要一个安装程序来将多个 jar、DLL 以及系统的其他文件放置在正确的位置。我用NSIS为了这。它不像商业安装程序构建器那么完善,但它足以完成多 jar Java 应用程序安装程序。如果您想查看我的 JOGL 应用程序处理 Windows 和 Mac 安装的方式,请参阅 Bridge Designer and Contest

最后一点是,如果您无法完美控制要部署应用程序的计算机,请强烈考虑在安装程序中打包 Java 运行时。处理gajilipon 的方法用户可以dork up java 安装并没有太多发现。内置 JRE 使下载包变得更大,但根据我的经验,这比处理用户计算机上的内容带来的痛苦要少得多。

此信息(尽管格式不那么可读)记录在 the JOGL deployment Wiki 上.

关于java - 从 jar 运行 opengl jogamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com