process.exec не возвращает правильный код - PullRequest
0 голосов
/ 13 августа 2010

У меня есть программа на Java с кодом:

public class Test1 {
public static void main(String args[]) throws InterruptedException,
        IOException {
    String cmd = "cmd /c start test.bat";
    Process p = Runtime.getRuntime().exec(cmd); 
    InputStream stderr = process.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;

    while ((line = br.readLine()) != null){
        System.out.println(line);}

      p.waitFor(); 
      int exitVal = p.exitValue(); 
      System.out.println(exitVal);

} }

test.bat выполняет другую программу, которая имеет следующий код:

public class ConnectionTest {

public Connection getConn throws SQLException{
      Connection conn = null;
      Statement st = null;
      ResultSet rs = null;
      String driverName = "com.ibm.db2.jcc.DB2Driver22222";
        try {
                Class.forName(driverName).newInstance();
            } catch (Exception e) {
                e.printStackTrace();

                System.exit(1);
                                } 

;;;; ;;;; ;;; ;;;

Но из Test1 значение выхода всегда равно 0. КАК приехать, когда пакет будет выполнен, он запустит Класс ConnectionTest, и он получит исключение, так как не найдет DB2Driver22222.

Может ли кто-нибудь объяснить мне, почему я не получаю правильный код ошибки или какие-либо сообщения об ошибках.

1 Ответ

3 голосов
/ 13 августа 2010

Проблема в том, что вы получаете код возврата команды start, а не то, что команда запуска выполняет . Хотя start может видеть test.bat выход с кодом 1, start сам завершается успешно (0). Вместо этого выполните .bat напрямую:

String cmd = "test.bat";
...