2012-02-22 126 views
3

独立是Runtime.getRuntime()。exec()平台独立的吗?

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

平台或我必须在参数传递平台特定的命令?

感谢


什么是Linux等价的命令cmd /c start /b java -jar

+1

CMD是Windows命令....并不适用于其他操作系统 – VirtualTroll 2012-02-22 16:19:13

+1

你觉得呢? Java不能提供映射表,因为它不可能在所有不同的OS之间进行映射。 – home 2012-02-22 16:19:39

回答

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内建像管道运营商。您可以启动程序并传递参数。

在Linux上启动另一个Java实例,你可以使用:

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

,如果它是不是在路径中使用绝对路径Java可执行文件。

+0

感谢您的回复。你能告诉我什么是'cmd/c start/b java -jar jarfile.jar'的linux相当于 – 2012-02-22 16:23:25

+1

添加了这个答案。 – Daniel 2012-02-22 16:27:17

3

它不是平台独立的。对于您所针对的每个操作环境,您需要一个外部命令版本。

1

Runtime.getRuntime().exec()是独立平台。 cmd /c是。你期望在Unix上运行cmd /c

所以,你如果你想运行外部命令的跨平台计划,以保持特定于平台的命令。

+0

谢谢。 Linux中的cmd/c start/b java -jar相当于什么? – 2012-02-22 16:25:47

1

它取决于平台。引述relevant javadoc重点矿山)的部分:

该cmdarray此方法检查是有效的操作系统命令。 哪些命令是有效的取决于系统,但至少该命令必须是非空字符串的非空列表。

1

当然不是,你正在执行一个shell命令。除非你没有其他更干净的方式来做你想做的事情,否则我不建议你像使用Java那样做。它违背了Java的便携性目的。