【问题标题】:Bat file opens blank command prompt on exitBat文件在退出时打开空白命令提示符
【发布时间】: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


【解决方案1】:

经过几次不同的尝试,使用各种命令,我发现对于我的情况,在任何命令后缀之前使用start /B 是有效的。所以在我的情况下,命令如下所示。

start /B %~dp0jre\bin\java.exe -jar %~dp0myJar.jar

我找到修复的问题/答案是following

【讨论】:

  • /B 运行 java.exe 而不将 CREATE_NEW_CONSOLE 标志传递给 CreateProcess,因此它继承了当前控制台。但是,如果您的应用程序实际上并没有使用控制台(即它只是创建一个空白控制台窗口),那么为什么不使用 javaw.exe 在没有控制台的情况下运行它,而不是让初始控制台坐在那里直到 Java 程序退出呢?
  • @eryksun 我尝试在 jre 的 bin 中使用 javaw.exe,但由于某种原因我无法使其工作,它仍然打开了命令提示符。因此,我只是不直接进行此修复。但我非常感谢您的意见和帮助。
猜你喜欢
  • 2016-02-17
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多