2016-02-26 69 views
0

我正在運行一個批處理文件,它在java中從Robocode運行一場戰鬥,然後收集戰鬥結果。我使用運行該批處理文件中的代碼是:從java運行批處理文件會導致掛起,但在正常運行時不會運行

Process p = Runtime.getRuntime().exec("cmd /c C:\\Users\\Joel\\Documents\\ver5Files\\battle.bat"); 
p.waitFor(); 

我的批處理文件的內容是:

cd "C:\robocode" 
java -DNOSECURITY=true -Xmx512M -Dsun.io.useCanonCaches=false -cp libs/robocode.jar robocode.Robocode -nodisplay -battle battles\DT_battle.battle -results resultsv5.txt 
exit 

如果我運行的robocode不到35個回合戰鬥也能正常工作,然而,當我嘗試運行一個具有35個或更多戰鬥的代碼時,代碼會掛起,並且永遠不會返回到java代碼。

我通過運行修改批處理文件以便它與顯示器一起運行進一步調查,以便我可以觀看戰鬥並找出懸掛的位置。第35場戰鬥結束後,進入「第35輪清理」階段,基本上掛在那裏。該程序不會被凍結或任何東西,它只是不會初始化下一場戰鬥。

我已經和一個正在研究類似項目的人討論過,他們沒有這些問題,我們的代碼也沒有明顯區別。我試着在兩臺不同的機器上運行它,但是兩者都得到相同的結果。

有什麼建議嗎?

回答

1

嘗試使用/k而不是/c並告訴我它是否有效。

那麼,如果你看看cmd.exe命令,你會看到它有很多選項。其中一些是:

/C  Run Command and then terminate 

/K  Run Command and then return to the CMD prompt. 
      This is useful for testing, to examine variables 

您可能會發現更多的選擇here

+0

同樣的結果,它陷入了第35輪的清理步驟... – Pottsiex5

+0

By Robocode你是指用Java編寫的編碼遊戲? –

+0

它是一個引擎,您可以通過坦克來相互對抗:http://robocode.sourceforge.net/在這種情況下,我正在運行我的代碼中的戰鬥,然後從文件中收集它們的結果。 – Pottsiex5