我用:
Process p = Runtime.getRuntime().exec(command);
其中命令是这样的:
command = new String[]{"cmd.exe", "/c", "start cmd.exe /c " + someCommand}
我知道我可以使用“/k”而不是“/c”。但我希望我的窗口仅在“someCommand”返回错误时保持打开状态。否则,如果一切正常,cmd 应该关闭。我将不胜感激。谢谢!
我用:
Process p = Runtime.getRuntime().exec(command);
其中命令是这样的:
command = new String[]{"cmd.exe", "/c", "start cmd.exe /c " + someCommand}
我知道我可以使用“/k”而不是“/c”。但我希望我的窗口仅在“someCommand”返回错误时保持打开状态。否则,如果一切正常,cmd 应该关闭。我将不胜感激。谢谢!
首先读取 Process ErrorStream 以查看是否有任何错误,然后使用 Scanner 等待用户输入。
public static Process p;
public static boolean error=false;
public static void main(String args[]){
try{
String command[] = {"cmd.exe", "/c", "start cmd.exe /c " + someCommand}
p = Runtime.getRuntime().exec(command);
Thread tracer = new Thread (new Runnable(){
public void run(){
try {
InputStream is=p.getErrorStream();
BufferedReader br = new BufferedReader (new InputStreamReader (is));
while (true) {
String s = br.readLine ();
if (s == null || s.trim().isEmpty()){
break;
}
System.out.println ("Command error: "+s);
error=true;
}
is.close ();
} catch (Exception ex) {
ex.printStackTrace ();
}
}
});
tracer.start ();
p.waitFor();
if(error){
System.out.println("There are some errors. Press <Enter> to finish.");
Scanner scanIn = new Scanner(System.in);
scanIn.nextLine();
scanIn.close();
}
}catch(Exception e){
System.out.println("Error "+e.getMessage());
}
}
这对我有用。
使用 inputStream() 函数 .. 它不会阻止窗口关闭,但会将其重定向到 Eclipse(或其他)中的控制台,在那里,您可以在 cmd window 中执行您想做的所有事情。您将在控制台中有您的 cmd 窗口(字面意思。)..我认为最好使用 ProcessBuilder 来处理您的事情..有趣的是,即使我正在寻找一种方法来为某些项目实现这一目标......
如果您使用cmd.exe /k cmd /c
,那么如果没有发生错误,它将关闭。