![](/img/trans.png)
[英]BufferedReader.read() hangs when running a perl script using Runtime.exec()
[英]Read Error when using Runtime.exec
之前在Stack Overflow上曾問過這個問題,但是堆棧跟蹤與我的不同,我認為這不是同一件事引起的。
這是我的堆棧跟蹤:
java.io.IOException: Read error
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at General.App.cmdString(App.java:393)
at General.App.cpauString(App.java:422)
at Functionality.RegistryScanThread.USBDScan(RegistryScanThread.java:109)
at Functionality.RegistryScanThread.doInBackground(RegistryScanThread.java:51)
at Functionality.RegistryScanThread.doInBackground(RegistryScanThread.java:1)
at javax.swing.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at javax.swing.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
這是我編寫的更復雜程序的簡化版本:
import java.util.*;
import java.io.*;
public class Test {
//global vars
public Test(){
// initializeing stuffs
}
public static void main(String[] args){
ArrayList<String> str = cmdString("reg query hklm");
for(String s : str){
System.out.println(s);
}
}
public static ArrayList<String> cmdString(String command){
boolean success = false;
ArrayList<String> result = new ArrayList<String>();
String line = "";
try{
Process p = Runtime.getRuntime().exec(command);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {result.add(new String(line));}
BufferedReader input2 = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((line = input2.readLine()) != null) {result.add(new String(line));}
int exitvalue = p.waitFor();
if (exitvalue != 0){
System.out.println("error!!");
success = false;
}
else{
success = true;
}
for(String s : result){
System.out.println(s);
}
input.close();
input2.close();
return result;
} catch(Exception e) {
e.printStackTrace(System.err);
System.out.println("error!!!");
return result;
}
}
}
基本上。 在上面的示例中,該錯誤不是真正可見的。 但是在我的程序中,它在我第一次運行時可以正確執行所有操作。
然后...當我第二次或第三次運行它時,會發生錯誤。 另外...看來,當我等待一段時間再重新運行時,似乎沒有發生錯誤。
我該如何解決這個問題?
我想這就是答案,很抱歉,僅根據我提供的代碼不可能回答我的問題。
基本上發生了什么事。
我相信這就是發生的事情。
當我看到觸發錯誤的確切行時,我發現了錯誤。 我能夠看到普通流不會產生錯誤,但是錯誤流會產生錯誤。 我以為這很奇怪,我立刻想起了我的C ++應用程序沒有錯誤流。
讓我知道這個答案是否合理!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.