0

我对java很陌生。我正在开发一种工具来检查您的 PC 是否符合某些规格。这包括编写和执行一个单独的批处理文件,并包括一个用于 CPU 模型的 API (SIGAR)。

我的问题是,当我尝试在 Eclipse 中将其导出到 Runnable JAR 并从命令行运行生成的 JAR 时,它给了我很多“构建路径中未包含的 DLL”异常。在构建路径中包含包含 API DLL 的文件夹后,我遇到了类似的异常。修复它的方法是将包含 DLL 的文件夹添加到高级系统设置中的环境变量 (PATH)。

问题:

  1. JAR 现在可以在我的计算机上正常运行,但是下载 JAR 的用户呢?他们是否还需要将 DLL 添加到环境变量中?如果是这样,JAR 有没有办法为他们做到这一点?

  2. 我的 JAR 不会通过双击运行,而是从命令行运行。有没有什么办法可以转移到下载 JAR 的用户身上?

  3. 如果用户下载了该工具并且因为没有正确的 JRE 版本而无法运行它,该工具会通知他们吗?如果没有,是否有办法绕过用户必须更新 JRE 或将包装为 EXE 就足够了?

提前感谢,非常感谢。很多问题。

4

1 回答 1

0

Q1:JAR 现在可以在我的电脑上正常运行,但是下载 JAR 的用户呢?他们是否还需要将 DLL 添加到环境变量中?如果是这样,JAR 有没有办法为他们做到这一点?

您可以将 DLL放入JAR 文件中:

但是,当您分发包含 DLL 的 JAR 时,您就会遇到不同平台需要不同 DLL(或其他)的问题。即使使用 Windows,您也存在 32 位与 64 位 DLL 的问题。

Q2:我的 JAR 不会通过双击运行,而是从命令行运行。有没有什么办法可以转移到下载 JAR 的用户身上?

您无法在 JAR 文件中解决该问题。“双击运行”功能由操作系统实现。提供这种功能的最佳方式是使用可双击的(特定于平台的)包装脚本。

Q3:如果用户下载了工具,因为没有正确的JRE版本而无法运行,工具会通知他们吗?如果没有,是否有办法绕过用户必须更新 JRE 或将包装为 EXE 就足够了?

除非您安装了 JRE,否则 JAR 文件只是一个被动的数据块。(实际上是一个 ZIP 文件)。

如果用户的 JRE 太旧,则 JRE 将无法加载 JAR 中的任何类(因为类文件版本号错误),或者由于缺少(系统)类而导致错误。

唯一的希望是做一些事情,比如提供一个包装脚本来启动你的应用程序,在尝试启动 JAR 之前检查 JRE 版本。


作为一般规则,如果你想做这样的花哨的事情,你需要在安装程序中分发你的程序,而不是作为一个裸 JAR 文件。

于 2017-06-29T08:01:13.047 回答