我已经看过几个关于此的话题,但我没有让我工作。 我想要做的就是从java程序中打开cmd.exe。
notepad.exe打开正常。
问题是cmd.exe剂量打开,代码编译正常,没有错误
这是我的代码:
public class CMD {
public static void main(String[] args) {
//Trying some variants how to start.
//String cmd = "C:\\WINDOWS\\system32\\cmd.exe";
//String[] cmd = {"C:\\WINDOWS\\system32\\cmd.exe","start"};
String[] cmd = {"C:\\WINDOWS\\system32\\cmd.exe","/c","start"};
// notepad works fine
//String notepad = "C:\\WINDOWS\\system32\\notepad.exe";
try {
Runtime runtime = Runtime.getRuntime();
//Process p = runtime.exec(notepad);
Process p = runtime.exec(cmd);
}
catch (java.io.IOException exception) {
System.out.println("Caught IOException: " + exception.getMessage());
}
}
}
答案 0 :(得分:7)
试试这个..
public static void main(String args[]) {
try {
Runtime.getRuntime().exec("cmd.exe /c start");
System.out.println("ok");
} catch (IOException ex) {
ex.printStackTrace();
}
}
答案 1 :(得分:1)
根据SO
上的许多人的建议,Runtime.getRuntime().exec(..)
可能会给您带来麻烦。而是使用ProcessBuilder
API。
我使用了以下内容:
public static void run(String argument) throws IOException {
List<String> command = new ArrayList<String>();
OsCheck.OSType osType = OsCheck.getOperatingSystemType();
System.out.println("OS: " + osType);
String shell;
if(osType.toString().equals("Windows")) {
command.add("cmd.exe");
command.add("/c");
} else {
shell = "/bin/bash";
command.add(shell);
}
command.add(argument);
InputStream inputStream = null;
InputStream errorStream = null;
try {
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process process = processBuilder.start();
inputStream = process.getInputStream();
errorStream = process.getErrorStream();
System.out.println("Process InputStream: " + IOUtils.toString(inputStream, "utf-8"));
System.out.println("Process ErrorStream: " + IOUtils.toString(errorStream, "utf-8"));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
inputStream .close();
}
if (errorStream != null) {
errorStream.close();
}
}
}
<强>效用强>
public final class OsCheck {
/**
* Enum type which contains OS names.
*/
private static OSType detectedOS;
/**
* <p>
* Finds the OS
* </p>
*
* @return One of the values of the enum OSType
*/
public static OSType getOperatingSystemType() {
if (detectedOS == null) {
String OS = System.getProperty("os.name", "generic").toLowerCase();
if (OS.contains("win")) {
detectedOS = OSType.Windows;
} else if ((OS.contains("mac")) || (OS.contains("darwin"))) {
detectedOS = OSType.MacOS;
} else {
detectedOS = OSType.Linux;
}
}
return detectedOS;
}
/**
* Represents the popular os types i.e Windows, or MacOS or Linux
*/
public enum OSType {
Windows, MacOS, Linux
}
}
答案 2 :(得分:1)
要使用java打开cmd,只需要两行代码。
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec("cmd.exe /c start");
--------------&GT;例如&lt; ------------
public class Cmd {
public static void main(String[] args) {
try {
//Create the Process Instance, You don’t need to Import anything for this.
Process p;
//To Execute the Process containg the Command as the Parameter
p = Runtime.getRuntime().exec("cmd /c start cmd");
//As the same way you can use all the commands to Execute your favorite apps.
} catch (Exception e) {
}
}
}