Является ли платформа Runtime.getRuntime (). Exec () независимой? - PullRequest
3 голосов
/ 22 февраля 2012

Есть

Runtime.getRuntime().exec("cmd /c");

не зависит от платформы или мне нужно передать специфическую для платформы команду в параметре?

Спасибо


Что такое Linux-эквивалент команды cmd /c start /b java -jar

Ответы [ 5 ]

7 голосов
/ 22 февраля 2012

Runtime.getRuntime (). Exec () не зависит от платформы, так как запускает внешний исполняемый файл на каждой платформе. Разумеется, сам исполняемый файл должен быть там, поэтому запуск notepad.exe в Linux, скорее всего, не будет работать (кроме случаев, когда у вас установлены Wine и Notepad, но это уже другая история).

В Windows введите все, что вы вводите в cmd.exe (подробности приведены ниже). Но для автоматического поиска пути в Windows вам нужно сделать что-то вроде

Runtime.getRuntime().exec("start iexplore.exe");

или

Runtime.getRuntime().exec("start my.pdf");

, который открывает файл PDF с соответствующим средством просмотра.

В linux вы можете делать все, что вы делаете в оболочке, такой как Bash, но вы не можете использовать встроенные команды bash, такие как оператор pipe. Вы можете просто запускать программы и передавать аргументы.

Для запуска другого экземпляра Java в Linux вы можете использовать:

Runtime.getRuntime().exec(new String[] {"java","-jar","myjar.jar"});

Используйте абсолютный путь к исполняемому файлу Java, если он не находится в PATH.

3 голосов
/ 22 февраля 2012

Не зависит от платформы. Вам нужна версия внешней команды для каждой операционной среды, на которую вы ориентируетесь.

1 голос
/ 22 февраля 2012

Конечно нет, вы выполняете команду оболочки.Я не предлагаю вам делать это с Java, если у вас нет другого более чистого способа делать то, что вы хотите делать.Это противоречит цели Java быть переносимым.

1 голос
/ 22 февраля 2012

Это зависит от платформы.Цитирование раздела соответствующего javadoc ( выделение шахты ):

Этот метод проверяет, является ли cmdarray допустимой командой операционной системы. Какие команды являются действительными, зависит от системы, но по крайней мере команда должна быть непустым списком ненулевых строк.

1 голос
/ 22 февраля 2012

Runtime.getRuntime().exec() не зависит от платформы. cmd /c есть. Что вы ожидаете запустить cmd /c в Unix?

Таким образом, вам нужно держать специфичные для платформы команды, если вы хотите создать кроссплатформенную программу, которая запускает внешние команды.

...