【问题标题】:Use Windows Batch File to start a Java program使用 Windows 批处理文件启动 Java 程序
【发布时间】:2015-03-11 21:05:16
【问题描述】:

我不熟悉批处理脚本,但我想创建一个 Windows 批处理文件来启动 Java 程序。问题是它必须指定安装 JRE 的路径。当您同时安装 JRE7 和 JRE8 时,该 JRE8 文件夹的名称将调用类似于 jre1.8.0_20jre1.8.0_40 的名称,版本号在后面。当您只安装了 JRE8 时,该文件夹将调用 jre8。有没有更简单的方法可以找到最新的 JRE 安装位置然后执行它?谢谢。

start ..\..\Java\jre7\bin\javaw.exe -Xms512M -Xmx1024M -Djna.library.path=.\lib -cp example.jar; com.example.main

【问题讨论】:

  • 这里是工作代码:javaw -Xms512M -Xmx1024M -Djna.library.path=.\lib -cp example.jar; com.example.main

标签: java windows batch-file


【解决方案1】:

您应该可以通过执行where java 获得javaw.exe 的位置。这可以像这样在批处理文件中设置为变量:

# sets a variable called 'java' to the location of javaw.exe
for /f "delims=" %a in ('where javaw') do @set java=%a
# execute you jar file
%java% -jar <app.jar>

注意到上述内容似乎仅在直接从命令行运行时才有效。这是另一个应该在批处理文件中工作的示例:

# run.bat
@echo off
setlocal enabledelayedexpansion
for /f %%a in ('where javaw') do (
  set java=%%a
)
!java! -jar %1

上面的批处理文件应该用jar文件的名字来调用:

 run.bat app.jar

【讨论】:

  • 嗨 Cyclone,感谢您的提示。如果用户安装了多个不同版本的 Java,会发生什么?如果我们只是简单地查找 javaw.exe 然后执行 Java jar 文件,它可能会搞砸一些事情,对吧?我们不应该始终以最新版本为目标来避免用户出错吗?当我尝试运行上面的命令时,它给了我以下错误:错误:注册表项'Software\JavaSoft\Java Runtime Environment\CurrentVersion'具有值'1.8',但需要'1.7'。我首先安装了 JRE7,然后安装了 JRE8。但是,我将这两个版本都保存在我的 PC 上。感谢您的帮助。
  • 我的猜测是where javaw 将返回最新安装程序的路径,即如果您在命令行中键入javaw -jar app.jar 将执行相同的程序。例如,在我的情况下,where javaw 将返回c:\ProgramData\Oracle\Java\Javapath\javaw.exe,这实际上是指向C:\Program Files\Java\jre1.8.0_40\bin\javaw.exe 的符号链接。如果我查看这个目录,我还安装了jre6jre7,但jre1.8.0_40 是最新的。
  • 感谢 Cyclone 的快速回复!我会接受你的回答,因为它对我很有效。感谢您让我知道“javaw”和“javaw”的作用。
  • @CaoFelix - 很高兴能提供帮助,请注意,在搜索可执行文件的路径时,您始终可以使用 where &lt;appname&gt;
【解决方案2】:

我认为最好只使用用户 JAVA_HOME 和/或 JRE_HOME 并让用户/系统管理员担心安装了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-24
    • 2020-04-10
    • 2017-08-13
    • 1970-01-01
    • 2014-10-01
    • 2010-10-19
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多