java - 从批处理文件中的 Java 应用程序获取退出代码

标签 java batch-file exit

我目前正在努力为我们的一个 Java 应用程序创建测试用例。 在我的代码中,我的 java 应用程序调用一个批处理文件,该文件又启动一个单独的 java 进程,该进程返回一个错误代码,我需要从调用的 java 应用程序中使用该错误代码。 我正在执行以下操作来调用我的批处理文件:

Process process = runTime.exec(new String[]{"cmd.exe","/c",scriptPath});
exitValue = process.waitFor();

批处理文件如下:

@echo off
cd %~dp0
java -cp  frames.FrameDriver
SET exitcode=%errorlevel%
exit /B %exitcode%

现在有了上面的代码和批处理文件,我的 JUnit 框架就卡在这个特定的测试用例上,就好像它在等待它结束一样。现在,当 JUnit 卡在测试用例上时,转到任务管理器并结束 java.exe 进程将允许 JUnit 框架继续处理其他用例。

双击运行.bat文件即可正常运行Java应用。

在我的批处理文件中的 java 命令之前添加 START 批处理命令似乎解决了挂起问题,但我似乎无法从中获得正确的退出代码我的 Java 应用程序,因为它始终为 0。(Java 应用程序使用 System.exit(INTEGER_VALUE) 退出并显示错误代码)。我假设 %errorlevel% 值被“start”命令自己的退出值覆盖。

谁能告诉我如何解决这个问题?

谢谢。

P.S:如果有任何不同,我使用的是 JDK 5 和 Netbeans 5.5.1。

最佳答案

不要在导出处使用/B。以下是我将如何编写脚本:

@ECHO off
ECHO Running %~nx0 in %~dp0
CALL :myfunction World
java.exe -cp  frames.FrameDriver
IF NOT ERRORLEVEL 0 (
  SET exitcode=1
) ELSE (
  SET exitcode=0
)
GOTO :END
:myfunction
ECHO Hello %~1
EXIT /B 0
:END
EXIT %exitcode%

注意:此外,您可以通过 3 种不同的方式执行 java 程序:

  java.exe -cp  frames.FrameDriver
  CALL java.exe -cp  frames.FrameDriver
  cmd.exe /c java.exe -cp  frames.FrameDriver

这非常关键,因为您的 Java 命令可能会以退出代码退出,并且为了将退出代码正确传递给 ERRORLEVEL var,您需要使用上面的正确方法,我不确定这一点。

关于java - 从批处理文件中的 Java 应用程序获取退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136708/

相关文章:

java - 如何在循环中组合 if 语句

java - 持续检查系统中其他模块是否正常工作的模块设计模式?

java - 在 Android 中实例化 172820 字符串数组的最佳方法是什么?

java - 如何避免通过 Android DownloadManager 下载损坏?

batch-file - 如何从命令行 check out 文件并在必要时显示 UCM 新事件 GUI

java - 使用bat命令永久设置java环境变量值

java - Tomcat 在关闭 jar 时关闭

c - 输入 '/' 退出 C 程序

windows - 如何在 Windows 批处理脚本或 Perl 中将文件移动到回收站?

c++ - main : return 0 hangs, exit 0 关闭。如何调试?