时
Runtime.getRuntime().exec("cmd /c");
平台独立或我必须在参数?
中传递特定于平台的命令由于
命令cmd /c start /b java -jar
答案 0 :(得分:7)
Runtime.getRuntime()。exec()在平台上是独立的,它将在每个平台上启动外部可执行文件。可执行文件本身必须在那里,所以在Linux上启动notepad.exe很可能不起作用(除非你安装了Wine和Notepad,但这是另一个故事)。
在Windows上,输入您要输入cmd.exe的任何内容(详情如下)。但要在Windows上执行自动路径查找,您需要执行类似
的操作Runtime.getRuntime().exec("start iexplore.exe");
或
Runtime.getRuntime().exec("start my.pdf");
打开带有相关查看器的pdf文件。
在linux上,你可以在像Bash这样的shell中做任何事情,但你不能像管道操作符那样使用bash内置函数。你可以启动程序并传递参数。
要在linux上启动另一个Java实例,您可以使用:
Runtime.getRuntime().exec(new String[] {"java","-jar","myjar.jar"});
如果它不在PATH上,请使用java可执行文件的绝对路径。
答案 1 :(得分:3)
它不是平台独立的。您需要为您要定位的每个操作环境提供一个外部命令版本。
答案 2 :(得分:1)
Runtime.getRuntime().exec()
与平台无关。 cmd /c
是。你期望在Unix上运行cmd /c
是什么?
因此,如果要创建运行外部命令的跨平台程序,则必须保留特定于平台的命令。
答案 3 :(得分:1)
它取决于平台。引用relevant javadoc的一部分(强调我的):
此方法检查cmdarray是否为有效的操作系统命令。 哪些命令有效取决于系统,但至少该命令必须是非空字符串的非空列表。
答案 4 :(得分:1)
当然不是,你正在执行一个shell命令。除非你没有其他更干净的方法去做你想做的事情,否则我不建议你这样做。它违背了Java的便携性目的。