2016-10-21 13 views
0

私はJavaでプロセスを実行します。プロセスは決してファイルを探してマシンをスキャンしてスキャンしません。私は一定の時間プロセスを実行し、出力を取得したい。この問題は、スクリプトが短時間に結果が見つからない場合はループ2が終了し、期間中に再び実行されないということです私のコードwhileループで2つの条件を満たす

BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
Process p = pb.start(); 
    while ((System.currentTimeMillis() <= endTime)){ //loop 1 
    while((line=stdInput.readLine()) != null){ loop 2 
     System.out.println(line); 
     } 
    } 
p.destroy(); 

の作品です。

stdInput.readLine()はまだ時間が終了した場合でも、ループは終了しません結果を返す場合、私はまた

while ((System.currentTimeMillis() <= endTime) || (line=stdInput.readLine()) != null)) 

しかし、この場合は試してみました。この場合

while ((System.currentTimeMillis() <= endTime) && (line=stdInput.readLine()) != null)) 

line=stdInput.readLine()は時間が終了していない場合であっても、結果が返されない場合は、ループが終了します

編集

:私はこのコードを試してみました

System.out.println("Before while"); 
while ((System.currentTimeMillis() <= endTime){ 
     System.out.println("while");  
     if(line=stdInput.readLine())!= null){ 
      System.out.println("One line"); 
     } 
    } 
     p.destroy(); 

の場合ループの終了が検出されない場合は、これが出力です

ok前に の間に

System.out.println( "while");それが5秒間呼ばれることになっていたときにちょうど1回だけ呼ばれた。

答えて

2

はあなたが意味するか:

while ((System.currentTimeMillis() <= endTime){ 
    if(line=stdInput.readLine())!= null){ 
     System.out.println(line); 
    }   
} 
+0

、それは正常に見えるが、それは働いていないおかげで、私はより詳細 –

0

は短期circut & &を使用しないようにしてください。

&を使用すると、両方の条件が確認されます。 & &の場合、最初のものが偽であれば、全体が短くなります。

rightLine()を正しく実行してもらいたいですか? & &で、第2の条件は、第1の条件が偽である場合には決して見られない。

&は両方をチェックして決定します。

+0

おかげで質問を更新しましたが、私は、これは私の場合で私を助ける方法を見ていない –

0

stdInputがスキャナから来た場合、おそらくnullにはなりません。あなたのコードをもう少し見せてください。

madmaxが言ったことは、はい、短絡してください。 0 AND 1 = 0の場合、0 AND something = 0を意味します。これは数学です。

+0

はい、それはスキャナ –

+0

だ私が言ったようにそれからです。 'while((line = stdInput.readLine())!= null){}'と言って、あなたは基本的に "スキャナから受け取った入力がヌルではない間に、私はループを続けます。私はそれがそれのように終わるための道を見ない。
できることは、while(!(line = stdInput.readLine())です。isEmpty()&&(System.currentTimeMillis()<= endTime)){} 'このように、入力が空文字列かどうかを検証しています。また、現在の時刻がendTimeよりも小さい場合は検証します。 –

+0

'!(line = stdInput.readLine()).isEmpty()'の代わりに、上記のようにフラグを使うことができるので、 '!(line = stdInput.readLine()。と等しい(フラグ)) '。 –

関連する問題