Запуск пакетного файла из 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

Вы можете найти больше вариантов здесь.

Другие вопросы по тегам