有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

部署使我的Java程序易于分发

我已经通过exe安装程序在PC上安装了Java3DAPI,它只是创建了一个新目录,其中lib子目录中有j3dcore.jarvecmath.jarj3dutils.jar和bin子目录中的j3dcore-ogl.dll

Netbeans没有任何问题,我的代码编译和执行都很顺利,但是一旦我构建了我的项目并试图从命令提示符下运行它,我得到一个UnsatisfiedLinkError的消息说no j3dcore-ogl in java.library.path

谷歌拯救了我,给了我3个可行的解决方案:

  • 通过将dll文件复制到我的JRE的bin目录中
  • 通过将dll文件的路径添加到库路径(java -Djava.library.path=dllpath
  • System.load()加载程序中的dll(实际上,我无法使这个dll正常工作)

我的问题是:这个问题有没有一个我错过的优雅的解决方案

对于每个想在其上使用此程序的不同PC机,他必须复制dll或将其添加到库路径,然后才能运行,这似乎很乏味。(附带问题:Netbeans为什么没有dll问题?)


共 (4) 个答案

  1. # 1 楼答案

    编辑-重读您的问题后,您的问题听起来不同。但是,我可以像这样运行,只需将所有dll文件放在与服务器相同的目录中。启动java进程的bat文件:

    java-classpath/你的罐子。jar/lib/j3dcore。jar/lib/vecmath。jar/lib/j3dutils。罐子包装。MainClass

    这在多个用户的PC上有效,所以我知道简单地把它放到工作目录中就行了

    我相信这取决于所使用的Java版本-64位或32位。正确的dll文件(同名)必须位于工作目录中

    我想当使用错误的dll时,我也遇到了类似的问题,而且它不依赖于操作系统(如果您的64位操作系统安装了32位Java,则需要32位j3dcore-ogl.dll文件)

    所以问题是,您使用的是哪个版本的Java(在IDE之外运行时),以及您将哪个版本的dll(如果有的话)放在工作目录中?我不需要在我的路径设置中使用任何dll文件,就可以在别人的电脑上运行,并且没有使用系统。load(),并且没有将文件复制到我用户的JRE/bin目录中-因此我知道,如果没有您提到的3个选项,这是可能的

  2. # 2 楼答案

    如果您将DLL放在与Jar相同的目录中,它会工作吗? 如果是的话,你可以考虑这样分配。

  3. # 3 楼答案

    我猜在windows上%PATH%的所有文件夹中都会搜索DLL。(UNIX版本的LD_库_路径)

    能否尝试将dll的路径添加到%path%变量

    似乎您正在尝试打包一个产品,其中包含许多JAR作为依赖项。你可能会从One-Jar中受益。它声称具有本机dll支持

  4. # 4 楼答案

    Making my Java program easily distributable

    如果您的意思是“方便最终用户”,请查看Java Web Start


    一个过路人问:

    Can you package the dll dependencies with Web Start?

    是的,但是好多了。您可以将每个平台的本机打包在单独的jar中,并仅将它们提供给使用该本机的平台,甚至可以将下载划分为32&;本地版本的64位版本

    JWS将本机放在应用程序的运行时类路径上,准备加载代码

    这一切对于最终用户来说都是自动发生的,他们单击一个链接,在请求时批准信任对话框,然后安装应用程序——可能是桌面集成,并像魔术一样出现在屏幕上

    JWS应用程序。使用本机的操作需要作为all-permissions安全级别分发,因为JVM不能保证任何“本机”操作