无法运行程序“...”:CreateProcess error = 2

时间:2015-09-02 17:37:58

标签: java batch-file cmd execute

我正在尝试用java执行cmd命令,但为什么这个命令不起作用?当我在windows cmd中尝试它时,它可以工作,但是当我想用Java执行它时,它就不起作用了。

String cmd = "cd "+System.getenv("APPDATA")+"\\.minecraft"
Process pc = Runtime.getRuntime().exec(cmds);

你知道为什么吗?

//编辑: 错误消息:

  

java.io.IOException:无法运行程序“cd C:\ Users \ Adrian \ AppData \ Roaming.minecraft”:CreateProcess error = 2,找不到文件...       在java.lang.ProcessBuilder.start(未知来源)       在java.lang.Runtime.exec(未知来源)       在java.lang.Runtime.exec(未知来源)       在at.freakey.thundriallauncheerr.Launcher $ SwingAction.actionPerformed(Launcher.java:313)       在javax.swing.AbstractButton.fireActionPerformed(未知来源)       at javax.swing.AbstractButton $ Handler.actionPerformed(Unknown Source)       在javax.swing.DefaultButtonModel.fireActionPerformed(未知来源)       在javax.swing.DefaultButtonModel.setPressed(未知来源)       在javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源)       在java.awt.AWTEventMulticaster.mouseReleased(未知来源)       at java.awt.Component.processMouseEvent(Unknown Source)       在javax.swing.JComponent.processMouseEvent(未知来源)       at java.awt.Component.processEvent(Unknown Source)       at java.awt.Container.processEvent(Unknown Source)       at java.awt.Component.dispatchEventImpl(Unknown Source)       at java.awt.Container.dispatchEventImpl(Unknown Source)       at java.awt.Component.dispatchEvent(Unknown Source)       at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)       at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)       at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)       at java.awt.Container.dispatchEventImpl(Unknown Source)       at java.awt.Window.dispatchEventImpl(Unknown Source)       at java.awt.Component.dispatchEvent(Unknown Source)       at java.awt.EventQueue.dispatchEventImpl(Unknown Source)       在java.awt.EventQueue.access $ 500(未知来源)       在java.awt.EventQueue $ 3.run(未知来源)       在java.awt.EventQueue $ 3.run(未知来源)       at java.security.AccessController.doPrivileged(Native Method)       at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(Unknown Source)       at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(Unknown Source)       在java.awt.EventQueue $ 4.run(未知来源)       在java.awt.EventQueue $ 4.run(未知来源)       at java.security.AccessController.doPrivileged(Native Method)       at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(Unknown Source)       at java.awt.EventQueue.dispatchEvent(Unknown Source)       at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)       at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)       at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)       at java.awt.EventDispatchThread.pumpEvents(Unknown Source)       at java.awt.EventDispatchThread.pumpEvents(Unknown Source)       at java.awt.EventDispatchThread.run(Unknown Source)   引起:java.io.IOException:CreateProcess error = 2,Das System kann die angegebene Datei nicht finden       at java.lang.ProcessImpl.create(Native Method)       在java.lang.ProcessImpl。(未知来源)       at java.lang.ProcessImpl.start(Unknown Source)       ......还有41个

2 个答案:

答案 0 :(得分:3)

cd不是您可以执行的程序。即使你可以,也不会没有

当您exec时,会启动一个新流程。这个新进程独立于您的进程(Java进程),并拥有它自己的"当前目录"。更改该进程中的当前目录将影响Java进程的当前目录。

cd是命令行程序cmd.exe内置命令。要运行cd命令,您需要运行cmd.exe /c cd ...。但正如我刚才所说,它将毫无意义(过程将立即结束)。

至于更改Java进程的当前目录,请参阅:Changing the current working directory in Java?

答案 1 :(得分:0)

我认为exec正在检查文件“cd C:\ Users \ Adrian \ AppData \ Roaming.minecraft”是否存在。

使用正确版本的exec方法而不是执行“cd C:\ Users \ Adrian \ AppData \ Roaming.minecraft”:

exec(java.lang.String command, java.lang.String[] envp,java.io.File workDir)

例如:

exec("executablefilename", null, "C:\Users\Adrian\AppData\Roaming.minecraft")
相关问题