2017-02-24 1 views
-2

私は以下のコードを取得しました。プログラムが実行中かどうかをチェックします。プログラムが実行されていない場合、ループが終了するまでプログラムが実行されていることがわかるまで、プログラムは再度チェックします。そして、私はそれをループする方法がわかりません。はプログラムが実行されるまで待ちます

public class Test { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws IOException { 

     String line; 
     String pidInfo =""; 

     Process p =Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe"); 

     try (BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()))) { 
      while ((line = input.readLine()) != null) { 
       pidInfo+=line; 
      }  
     } 

    while(pidInfo == "msiexec.exe") 
     if(pidInfo.contains("msiexec.exe")) { 
      System.out.println("Notepad is running"); 
      TimeUnit.SECONDS.sleep(120);   
     } else {  
      System.out.println("Notepad is not running"); 
      loop    
     }  
    } 
} 

出力は空です。誰が私のコードに間違っているか教えてもらえますか?どんな助けもありがとう。

答えて

0

ループが間違っているためです。最初に、単一のStringでタスクのリストを読み取るループがあります。このリストが単一の単語msiexec.exe(文字列をテストするのに==を使用しないでください)に縮小されているとは思われませんので、2番目のループの条件は常に偽です(ちょうど2番目のループを削除してからpidInfoに単語かどうか)。

+0

msiexec.exeが実行されているかどうかを2番目のループで確認します。それが実行されていない場合、実行されるかどうかを確認するために再びループします。指定されたプロセスが実行中であれば、ループは終了します。上記のコードを編集しました。 代替コードはありますか? –

+0

2回目のループは必要ありません!あなたはすでに、すべてのタスク名を単一の文字列で捕まえました。次に、文字列にタスク名が含まれているかどうかをテストします。 –

関連する問題