Запуск пакетного файла из 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
Это прекрасно работает, если я запускаю битву с менее чем 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
Вы можете найти больше вариантов здесь.