2012-02-22 2 views
3

лиЯвляется Runtime.getRuntime(). Exec() независимой от платформы?

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

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

Благодаря


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

+1

cmd - это команда windows .... не распространяется на другие os – VirtualTroll

+1

Что вы думаете? Java не может предоставить таблицу сопоставления, так как просто невозможно сопоставить все различные ОС. – home

ответ

7

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, как оператор трубы. Вы можете просто запускать программы и передавать аргументы.

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

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

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

+0

Спасибо за ответ. Можете ли вы сказать мне, что эквивалент linux 'cmd/c start/b java -jar jarfile.jar' –

+1

добавил это к ответу. – Daniel

3

Это не независимая от платформы. Вам нужна версия внешней команды для каждой настраиваемой вами рабочей среды.

1

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

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

+0

Спасибо. Что эквивалентно 'cmd/c start/b java -jar' в linux? –

1

Это зависит от платформы. Цитируя раздел relevant javadoc (курсив):

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

1

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

Смежные вопросы