【问题标题】:check for JRE on system检查系统上的 JRE
【发布时间】:2012-08-24 13:25:41
【问题描述】:

我有一个现有的 Java 程序,我正在提供给一些......我的技术上不太倾向于的客户。他们使用 Linux、Windows 的组合,而且很少有苹果机器,这就是我选择 Java 来开发程序的原因。问题是他们在尝试启动程序时不断打电话给我,因为他们没有已安装 JRE。有什么办法:

  1. 导入一个库,它会给我某种命令来检查。
  2. 向程序中添加一些内容以检查 JRE。 或者(我真的不想这样做,因为我首先选择了 java)
  3. 用 C++ 编写一些东西来检查 JRE。

我的目标:

  1. 检查机器上是否安装了 JRE
  2. 如果是:启动程序
  3. 如果否:弹出一条消息“未找到 Java 环境,从 Java 网站下载”。然后我会将他们直接带到他们点击“运行”并安装的链接。

// 我会做类似的事情

if (JRE.exists()) // maybe use a pathname that would only show up if a JRE is installed
{
    // launch program
}
else
{
    // launch Java installer
}
system.exit(0);

我知道这在 java 中真的很难(因为没有 JRE 就无法运行 Java 程序),但如果可能的话,我更愿意保持这种通用性。

如果没有简单的解决方法,我将制作一个自述文件,其中包含指向检查系统上 JRE 的 java 网站的链接,但用户必须做的工作量越少越好.

【问题讨论】:

  • 您不能使用 Java 来检查 Java 是否退出。在将 Java 程序作为创建批处理进行午餐之前,您需要做一些事情。
  • 确实,要运行代码,Java 必须已经存在。

标签: deployment installation java


【解决方案1】:

我建议您使用 IzPack 之类的 Java 安装程序或其他此类免费工具。使用其中之一,您可以创建安装程序并生成本机启动器。这可以配置为搜索Java,如果没有找到,它可以帮助用户安装它。

有些开发人员也将 JSmooth 或 Launch4J 用于原生启动器。

【讨论】:

  • 我研究了这些,但它们都需要 XML 文档。我没有任何 XML 经验,有什么想法可以从哪里开始?
  • 任何 Java IDE 都可以帮助您编辑 xml 文件。所有这些工具都有示例,有些还有教程。
【解决方案2】:

检查系统上的 JRE

使用deployJava.js,如Java Web Start info. 页面中所述。

..旨在确保在提供指向 JWS 应用程序的链接之前安装合适的最低 Java 版本。或启动小程序。

如果它是富客户端桌面应用程序。 (例如小程序或框架),使用 Java Web Start 部署它。

【讨论】:

  • 它不是一个小程序,它只是一个标准的 Java 应用程序
  • 我从没想过它是一个小程序。但是主类是否显示JFrame? JWS 最初用于启动基于框架的桌面应用程序。顺便说一句,您可以通过提供应用程序的更多详细信息来帮助我们。
  • 我有一个 swing (JFrame) 程序,它充当与我的服务器交互以存储矢量数据的客户端。我有一个在客户端和服务器之间传递的消息对象,允许客户端修改矢量数据。我查阅了有关 JWS 的信息,我喜欢这个概念,但仍然不确定如何实现它。我有一个将地址链接到我的 IP 的无 IP 帐户。这完成了我想要的一切(确保 Java 是最新的并允许对程序进行更新),但我可以使用一个示例如何将我的代码转换为 JWS 应用程序。
  • 查看 Java Web Start API demos 上的独立示例。请注意那些演示。使用仅适用于 JWS 应用程序的 API。 - 这将需要更改代码。但是您很可能可以绕过代码更改,因此请忽略非 J2SE 类并更多地查看 JNLP 文件(描述 JRE 的启动,很像配置小程序的 applet 元素)和文件服务演示。这显示了如何对代码进行数字签名(不确定您的应用程序是否需要信任)。没有提出任何问题,因此我将问题推断为“实现目标的方法?”。已经回答了。
  • 我一直在做更多的研究。我在 IBM 网站上找到了关于它的声明,并发现“必须在每台从 Web 启动客户端 Java 应用程序的机器上安装 Java Web Start或从 Java 应用程序管理器。因此,虽然客户端 Java 应用程序可以从 Web 页面启动,但如果不先在本地计算机上安装 Java Web Start,则无法启动应用程序本身;因此 Web 浏览器只是提供了一个方便的链接启动程序——不多也不少。”所以这并不能解决没有 java 的问题
【解决方案3】:

如果您不能使用 Java Web Start,虽然我建议您使用它,但您可以编写简单的脚本来检测 Java。

对于 Windows (.bat):

if not "%JAVA_HOME%" == "" (
    "%JAVA_HOME%\bin\javaw.exe" -jar YourApp.jar
) else (
    start http://java.com/download/
)

如果定义了JAVA_HOME 环境变量,那么javaw.exe 将使用您的应用程序jar 文件启动。 javaw.exe 可执行文件使用窗口子系统,因此它在没有控制台窗口的情况下运行。

如果没有设置JAVA_HOME,则会在默认浏览器中打开Java下载页面。

更多选项,您可以使用JScript;使用它,您可以向用户显示未安装 Java 的警告,然后打开浏览器进行下载。

适用于 Linux (.sh):

if [ "$JAVA_HOME" != "" ]; then
    $JAVA_HOME/bin/java -jar YourApp.jar &
else
    echo JAVA_HOME is not set: Java Runtime Environment (JRE)
    echo is not installed your system.
    echo Either install it from http://java.com/download/
    echo or set JAVA_HOME environment variable.
fi

【讨论】:

  • 相同的脚本 (.sh - bash) 应该可以在 MacOS 上运行。我从来没有使用过它,所以我不能确定也不能检查它。
【解决方案4】:

您为什么不直接创建批处理和 bash 文件,然后要求您的客户根据操作系统运行其中一个或另一个

【讨论】:

  • 因为我不懂 bash :-(
【解决方案5】:

如果 JRE 安装在系统上,则 JAVA_HOME 环境变量在 Windows 和 Linux 上都设置,它包含 JRE 的路径。您可以检查是否设置了此变量并相应地继续。

【讨论】:

  • hmmm.... 所以我使用 if (!getenv("JAVA_HOME".equals(NULL))) {Launch program} else { // 启动浏览器安装位置}
  • 当然,我必须找到与此相同的 c++,然后仅适用于 windows 和 linux。我仍然需要为 osX 找到一种方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多