- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编写了一个使用 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/
我已经编写了一个使用 opengl 的程序,我一直在 eclipse 中运行而没有出现问题,现在我想将其打包到 jar 中进行部署。 我使用 Maven 来管理所有依赖项和构建过程。我已经完成了清理和
JavaCL 使用 JNA,JOCL 使用 JNI,所以我希望 JavaCL 表现出更好的跨平台兼容性,而 JOCL 通常应该具有更好的性能。 JOCL 与 JOGL2 一起进行了测试,这应该使得在
我正在尝试在 Maven 项目中使用外部 jar JOGL 和 GlueGen。构建过程有效,但是当我执行 jar 时,我收到此错误消息: Exception in thread "main" jav
我使用的是 windows 7 64 位并使用 eclipse indigo。我下载了最新版本的 jogl 2,并按照此链接创建了一个 eclipse 项目 https://sites.google.
我是一名优秀的程序员,十分优秀!