如果在运行时打印错误,则停止程序

时间:2010-08-05 18:17:24

标签: java error-handling

import java.lang.Process;        
import java.io.*;       
import java.io.InuputStream;       
import java.io.IOException;

 public class newsmail{    
 public static void main(String[] args) throws IOException{    
    String command = "java Newsworthy_RB";    
    Process child = Runtime.getRuntime.exec(command);  
            int c;  
    InputStream in = child.getInputStream();
    while((c=in.read())!=-1){
        System.out.print((char)c);
    }
    in.close();

    command = "java Newsworthy_CA";
    Process child = Runtime.getRuntime.exec(command);
    InputStream in = child.getInputStream();
    while((c=in.read())!=-1){
        System.out.print((char)c);
    }
    in.close();
  }

我正在执行上面代码中给出的两个java程序。 如果在第一个程序(Newsworthy_RB)中发生任何错误,我的程序应该终止显示错误。相反,它继续执行第二个程序(Newsworthy_CA)。

应该采取什么措施来获取错误信息......请建议......

2 个答案:

答案 0 :(得分:1)

您可以通过显式调用System.exit(status)来停止该程序。如果出现错误,则应!= 0表示错误。

您可以通过child.getErrorStream()访问错误流。

编辑:实际答案取决于您真正想做的事情。如果您的目标只是检查,如果第一个程序成功终止(结束),您可以写下以下内容:

public static void main(String[] args) throws Exception {
     Process child1 = Runtime.getRuntime().exec("cmd");
     int status1 = child1.waitFor();

     System.out.println("Exit status of child one: " + status1);

     // Something has gone wrong
     if (status1 != 0) {
         // end program
         return;
     }

     Process child2 = Runtime.getRuntime().exec("cmd2");
     int status2 = child2.waitFor();

     System.out.println("Exit status of child two: " + status2);
}

Process#waitFor()执行以下操作(从javadoc复制):

  如果需要,

会导致当前线程等待,直到此Process对象表示的进程终止。如果子进程已终止,则此方法立即返回。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。

答案 1 :(得分:1)

尝试

if (child.waitFor() != 0) {
    // print error message here
    return;
}

两次执行之间。 waitFor导致当前线程等待,直到关联的进程返回。请参阅here