感謝您的支持。Java - ProcessBuilder中的批處理文件執行被阻止
我正在使用ProcessBuilder從java執行批處理文件。這個執行將在每4分鐘一個線程中繼續。輸出和錯誤將被寫入文件。
這工作正常1或2天。之後,執行線程被阻塞。我將重新啓動應用程序,並在1或2天內正常工作。過去20天我一次又一次地遇到了這個問題。
我試着分析。我沒有從錯誤流中找到任何錯誤。一切都是正確的,直到在日誌文件中打印的最後一條語句。我把線程轉儲和分析。線程狀態
「負載 - 蘇氨酸」 PRIO = 6 TID = 0x0000000009875000 NID = 0x1014可運行的[0x000000000c71e000] java.lang.Thread.State中:RUNNABLE
- 鎖定< 0x00000000894fbeb8>(一個java.io.InputStreamReader中) 在java.io.BufferedReader.readLine(來源不明)
在com.xxx.qqq.load(MyLoad.java:553)==>這是而行()語句
爲什麼它在等待while()語句行無限期?
這是什麼原因造成的?
public void load()
{
BufferedReader br1=null,br2=null;
String err=null,err1=null;
Process p=null;
try
{
ProcessBuilder pb=new ProcessBuilder();
pb.directory("my work directory given");
pb.command("cmd.exe","/c","www.bat");
pb.redirectErrorStream(true);
p=pb.start();
br1=new BufferedReader(new InputStreamReader(p.getInputStream()));
br2=new BufferedReader(new InputStreamReader(p.getErrorStream()));
while((err=br1.readLine())!=null || (err1=br2.readLine())!=null) { if(err!=null) {logtofile(err);} if(err1!=null) {logtofile(err1);}}
p.waitFor();
}
catch(Exception e){e.printStackTrace();}
finally
{
try{
if(p!=null){p.destroy();}
if(br1!=null) {br1.close();}
if(br2!=null) {br2.close();}
}catch(Exception e) {
e.printStackTrace();
}
}
}
public void logtofile(String err){
//all statements are written to file.
//file 'll be changed over the time when file size exceeds 2MB.
}