【发布时间】:2017-08-07 20:48:41
【问题描述】:
我有一个 .jar 文件和一个用于该特定 .jar 的 jre 文件夹,通过这样做,用户不必下载 Java,或者如果他们没有 Java,它仍然可以工作。
为了启动这个 .jar 文件,我使用了一个 .bat 文件,如下所示。
%~dp0jre\bin\java.exe -jar %~dp0myJar.jar
%~dp0 部分用于查找 jre 文件和 .jar 文件的路径。
但问题在于,每当 .bat 文件启动 .jar 文件时,命令提示符仍处于打开状态。我知道这是因为我的程序是一个“窗口”应用程序,因此一旦 .jar 程序完成,命令提示符将首先关闭。
为了解决这个问题,我尝试使用以下不同的方法修改 .bat 文件。 (不是一次全部,一次一个)
start %~dp0jre\bin\java.exe -jar %~dp0myJar.jar
start "" "%~dp0jre\bin\java.exe" -jar %~dp0myJar.jar
start %~dp0jre\bin\java.exe -jar %~dp0myJar.jar
exit
start "" "%~dp0jre\bin\java.exe" -jar %~dp0myJar.jar
exit
%~dp0jre\bin\java.exe -jar %~dp0myJar.jar
exit
但是...当使用这些似乎对其他人有用的方法时,而不是完全关闭命令提示符。它退出启动 .jar 文件的命令提示符,然后打开一个空白命令提示符。关闭 .jar 时,它会关闭新的空白命令提示符,或者如果我关闭新的空白命令提示符,它也会关闭 .jar
我无法弄清楚这是为什么,以及为什么它不只是退出启动 .jar 的第一个命令提示符,然后就是这样。
为了解决这个问题,我从this 等问题中汲取了灵感。
更新
只是尝试直接从命令提示符运行命令,而不是使用实际的 .bat 文件。但是因为我使用的是获取bat文件中jre和.jar的完整路径的方法,所以不得不改用完整路径。然而,这一次它实际上是通过使用这种方法来工作的。
my\long\path\jre\bin\java.exe -jar my\long\path\myJar.jar
exit
但是在 .bat 文件中使用相同的方法时,它不会打开空白命令提示符,但它永远不会退出第一个“原始”命令提示符。
【问题讨论】:
-
运行批处理文件时,我认为窗口必须保持打开状态,因为批处理文件必须从命令提示符启动,因此它与窗口相关
-
@rabbitguy 是的,但因为它仅用于启动 .jar 文件,它应该打开 bat 文件的命令提示符。但是一旦 bat 功能完成并打开了 .jar 文件,就不再需要 .bat 文件,因此可以将其关闭。但是你是对的,无论何时使用 .bat 文件,它都必须打开命令提示符,但只有在它必须完成的任务完成之前。
-
听起来好像不是批处理文件在做这个......你说它关闭了控制台,但是当jar打开时它会启动一个新的空白cmd。如果手动从 cmd 运行启动命令,它会这样做吗?
-
@MarkW 我很欣赏输入,它不会在 .jar 之后打开新的空白命令提示符。它首先从 .bat 文件打开原始命令提示符,然后快速关闭该命令提示符并打开空白命令提示符,然后首先是 .jar 文件实际打开。
-
我找到了解决办法,我已经为可能遇到相同问题的任何其他人发布了答案。
标签: java windows batch-file cmd jar