我正在努力爲我們的一個Java應用程序創建測試用例。 在我的代碼中,我的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。
爲什麼要通過批處理文件執行此操作,而不是直接通過Runtime.exe或ProcessBuilder直接運行目標'java'命令,是否有特殊原因? – 2013-02-28 13:27:28
主要是因爲我的這個.bat文件正在複製一個在Linux上運行的類似的shell腳本,而我現在不想改變它的設計。在生產中我們的應用程序運行在Linux機器上我們的開發環境是Windows。 – 2013-02-28 13:40:09
嘗試用CALL替換START。 START正在創建一個不再連接或響應批處理文件的新外部進程。當然,CALL可能會出現同樣的「掛起」,但值得一試。也可以嘗試@CALL(注意符號)。 – Lizz 2013-03-01 07:19:46