Почему мой код «if (p.exitValue() != 0)» выполняется дважды?

#java #android

#java #Android

Вопрос:

Когда я выполняю сценарий оболочки, используя приведенный ниже метод, мой код «if (p.exitValue() != 0)» выполняется ДВАЖДЫ, когда он успешен … кто-нибудь знает почему? Кроме того, при сбое сценария оболочки код else выполняется один раз, а затем код успеха выполняется снова в любом случае. Что я делаю не так?

 void exec(String commander){


            Process p = null;
        try {
            p = Runtime.getRuntime().exec(commander);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

           StreamGobbler errorGobbler = new 
           StreamGobbler(p.getErrorStream(), "ERROR"); 

           // any output? 
           StreamGobbler outputGobbler = new 
           StreamGobbler(p.getInputStream(), "OUTPUT"); 

           // kick them off 
           errorGobbler.start(); 
           outputGobbler.start(); 

           // any error??? 
           int exitVal = 1;
        try {
            exitVal = p.waitFor();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        System.out.println("ExitValue: "   exitVal); 

        if (p.exitValue() != 0)
         {

        //SUCCESS Code RUNS TWICE

         }
         else {


            //FAILURE Code Runs Once, then Success Code Runs anyway!! WHY? 


         }

       }
  

Комментарии:

1. Я не вижу в этом фрагменте кода ничего, что показывало бы, почему эта строка выполняется дважды. Можете ли вы опубликовать код, который вызывает exec()?

2. Чтобы получить лучшую помощь раньше, отправьте SSCCE .

Ответ №1:

Возможно, ваш void exec(String commander) тоже вызывается дважды. Вы это проверяли?