Process 类型对象的 waitFor() 方法的时候当前线程会被阻塞掉,因为InputStream in = Process.getInputStream();或 InputStream err = Process.getErrorStream(); 这2个流中的一个会被阻塞住,所以解决的办法可以是用多线程来解决,可以参看http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps_p.html 。
但还有另一种方法可以尝试,
String[] cmds = {...};//command and arg
ProcessBuilder builder = new ProcessBuilder(cmds);
//both read inputstream and errstream
builder.redirectErrorStream(true);
Process process = builder.start();
BufferedReader br = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String readLine = br.readLine();
while (readLine != null) {
System.out.println(readLine);
readLine = br.readLine();
}
int resultValue = process.waitFor();
builder.redirectErrorStream(true); 和BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); 这样使用就可以在一个线程中执行,而保证不被阻塞住。
分享到:
相关推荐
java.lang.NoSuchFieldError: Companion 问题的解决方案
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
java.lang.NumberFormatException For inputstring 4294967295处理方法
idea启动项目报错 java.lang.NegativeArraySizeException解决方法
java.lang.runtimeexception unexpected subelement
解决java.lang.StackOverflowError
java.lang.OutOfMemoryError: Java heap space 解决方法
搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space 资料整理
解决 java.lang.NoSuchFieldError: STRING at org.jbpm.identity.hibernate.PermissionUserType. 不用jbpm的jbpm-identity.jar 用这个就好
scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetException 安装这个版本的scrcpy即可。
记录java.lang.OutOfMemoryError:Java heap space的情况 文章内容: 一.问题描述+原因分析+解决方案 二.JVM调优说明 三.Tomcat添加到jvisualvm监控
java.lang.UnsupportedOperationException异常(csdn)————程序
java.lang.OutOfMemoryError: PermGen space 解决方案
java.lang.NoClassDefFoundError: de/javakaffee/kryoserializers/CurrencySerializer
NULL 博文链接:https://jameskaron.iteye.com/blog/2291495
java.lang.OutOfMemoryError处理错误
java 9 中引入了模块的概念,默认情况下,Java SE中将不再包含java EE 的Jar包 而在 java 6/7 / 8 时关于这个API 都是捆绑在