当前位置: 代码迷 >> J2EE >> 关于JAVA进程调用的有关问题
  详细解决方案

关于JAVA进程调用的有关问题

热度:35   发布时间:2016-04-22 01:42:19.0
关于JAVA进程调用的问题
Java code
public class TestExp{    public static void main(String[] args) {        Runtime rt = Runtime.getRuntime();        Process processexp = null;        String exp = "exp scott/abcdef@testst file=f://sql16.dmp";        try {            processexp = rt.exec(exp);            processexp.waitFor();//阻塞当前进程                    System.out.println("导出成功");         } catch (IOException e) {               e.printStackTrace();         } catch (InterruptedException e) {               e.printStackTrace();         }    }}

我想通过JAVA调用oracle的命令导出数据库,但是在执行waitFor()的时候进程一直处于阻塞状态,如果我把JAVA虚拟机关闭后进程才会继续运行,请问这个问题怎么解决啊?因为我需要等待进程结束之后再让java代码继续执行,请同仁们赐教!!

------解决方案--------------------
有些本地進程是有返回值的,如果你不把這些返回值拿走,就會一直阻塞。你試試把Process的
getErrorStream();
getInputStream();
getOutputStream();
這些方法調用一下,可能不用全調,只要把流中的數據拿出來就行。
------解决方案--------------------
挂起的原因不是waitFor的问题,waitFor就如API文档所说,就是等待所调用的进程执行完毕。

挂起的原因是你没有处理该进程的Console输出缓冲区,所以所调用的进程在做显示的时候阻塞了。

参见这里,会另外启动线程负责处理Error输出和标准输出:
http://leonmau.iteye.com/blog/1174000

  相关解决方案