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

时间:2013-02-28 13:24:18

标签: 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应用程序。

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

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

感谢。

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

1 个答案:

答案 0 :(得分:3)

请勿在退出时使用 / 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,您需要使用上面的正确方法,我不确定。