JAVA命令行调用FLEX命令阻塞

来源:互联网 发布:光子嫩肤 效果 知乎 编辑:程序博客网 时间:2024/05/16 06:04

由于项目需求,需要在JAVA中调用FLEX命令进行编译。结果在调用过程中,发现有时线程会阻塞。经过一番GOOGLE,百度等查看、思考后,发现问题所在:如果在编译过程中,输出的错误信息少,不会阻塞。但是在编译过程中,输出的错误信息比较多的时候,就会阻塞。所以经过测试发现,用以下办法可以解决。开启两个线程分别读取输入流和错误流,这样就可以了。


final Process process = Runtime.getRuntime().exec(command.toString());
        
        new Thread() {
            @Override
            public void run() {
                try {
                    BufferedReader bufferedReader = new BufferedReader(
                            new InputStreamReader(process.getInputStream()));
                    String ls_1;
                    while ((ls_1 = bufferedReader.readLine()) != null) {
                        System.out.println(ls_1);
                    }
                    process.getInputStream().close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
        
        new Thread() {
            @Override
            public void run() {
                try {
                    BufferedReader bufferedReader = new BufferedReader(
                            new InputStreamReader(process.getErrorStream()));
                    String ls_1;
                    while ((ls_1 = bufferedReader.readLine()) != null) {
                        System.out.println(ls_1);
                    }
                    process.getErrorStream().close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
        
        process.waitFor();
        int state = process.exitValue();//0为正常退出,1为不正常退出