我已经通过exe安装程序在PC上安装了Java 3D API,它只是在lib子目录中创建了一个j3dcore.jar
,vecmath.jar
,j3dutils.jar
的新目录,并{{ 1}}在bin子目录中。
Netbeans没有问题,我的代码编译和执行顺利,但是一旦我构建了我的项目并尝试从命令提示符运行它,我得到j3dcore-ogl.dll
说UnsatisfiedLinkError
。
谷歌救援并给了我3个可行的解决方案:
no j3dcore-ogl in java.library.path
)java -Djava.library.path=dllpath
加载程序中的dll(实际上我无法使用此工具)我的问题是:这个问题有一个优雅的解决方案,我错过了吗?
对于每个不同的PC,有人想要使用这个程序,似乎很乏味,他必须复制dll或将其添加到库路径才能运行。 (旁边的问题:Netbeans怎么没有用dll的问题?)
答案 0 :(得分:1)
使我的Java程序易于分发
如果您的意思是“最终用户容易”,请Java Web Start。
路人问道:
您可以使用Web Start打包dll依赖项吗?
是的,但更好,更好。您可以将每个平台的本机打包在单独的Jars中,并仅将它们提供给使用该本机的平台,即使在32和32之间对下载进行分区也是如此。 64位版本的原生代。
JWS将本机放在应用程序的运行时类路径上,准备加载代码。
这一切都会自动发生在最终用户身上,他们点击链接,在被问到时批准信任对话框,并安装应用程序 - 可能与桌面集成,并在屏幕上显示为魔术。
JWS应用。使用本机需要以all-permissions
安全级别进行分发,因为JVM无法保证任何“原生”的操作。
答案 1 :(得分:0)
如果您将dll放在与Jar相同的目录中,它是否有效? 如果是,您可以考虑像这样分发它。
答案 2 :(得分:0)
我想在Windows上%PATH%的所有文件夹中搜索DLL。 (UNIX flavor的LD_LIBRARY_PATH)
您可以尝试将dll的路径添加到%path%variable吗?
您似乎正在尝试将包含许多jar的产品打包为依赖项。您可以从One-Jar中受益。它声称拥有本机dll支持。
答案 3 :(得分:0)
编辑 - 重新阅读问题后,您的问题听起来与众不同。但是,我可以通过将所有dll文件放在与启动java进程的.bat文件相同的目录中来实现我的运行:
java -classpath ./YourJar.jar;./lib/j3dcore.jar;./lib/vecmath.jar;./lib/j3dutils.jar package.MainClass
这适用于多个用户的PC,所以我知道只需将其放入工作目录即可。
我认为这取决于所使用的Java版本 - 64位或32位。正确的dll文件(同名)需要在工作目录中。
我认为在使用错误的dll时我遇到了类似的问题,并且它不依赖于操作系统(如果您的64位操作系统安装了32位Java,则需要32位j3dcore-ogl.dll文件)。
所以问题是,您使用的是哪个版本的Java (在IDE外部运行时),以及您在工作目录中放置了哪个版本的dll(如果有的话)?我在路径设置中不需要任何dll文件来使其在其他PC上运行,并且没有使用System.load(),也没有将文件复制到我的用户的JRE / bin目录中 - 所以我知道这是可能的你提到的3个选项。