2

我用:

Process p = Runtime.getRuntime().exec(command);

其中命令是这样的:

command = new String[]{"cmd.exe", "/c", "start cmd.exe /c " + someCommand}

我知道我可以使用“/k”而不是“/c”。但我希望我的窗口仅在“someCommand”返回错误时保持打开状态。否则,如果一切正常,cmd 应该关闭。我将不胜感激。谢谢!

4

3 回答 3

0

首先读取 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());
    }
}

这对我有用。

于 2013-09-18T15:42:45.090 回答
0

使用 inputStream() 函数 .. 它不会阻止窗口关闭,但会将其重定向到 Eclipse(或其他)中的控制台,在那里,您可以在 cmd window 中执行您想做的所有事情。您将在控制台中有您的 cmd 窗口(字面意思。)..我认为最好使用 ProcessBuilder 来处理您的事情..有趣的是,即使我正在寻找一种方法来为某些项目实现这一目标......

于 2013-09-19T08:28:49.273 回答
-1

如果您使用cmd.exe /k cmd /c,那么如果没有发生错误,它将关闭。

于 2013-06-24T09:11:25.853 回答