我正在尝试用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个
答案 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")