使用swftools将pdf转换为swf时遇到的java.lang.process问题

[align=left][/align]
引用
因为项目需要,这几天在研究仿百度文库的一个例子。网上搜索了一下,发现基本上都是一个思路:先通过 openoffice 和 jodconverter 将office等文档转换为 pdf ,然后再通过java.lang.process 调用 swftools 程序将 pdf 转换为 swf。最后就可以利用 flexpaper 将生成的 swf 显示出来了,效果和百度文库差不多。

思路上没有问题,但是在具体做的时候遇到了一个java.lang.process 阻塞的问题,就是在调用 java process 来启动 swf 转换文件时一直不能生成 pdf,后来自己摸索的好久也没明白是什么问题,无意中找到了一个关于java进程阻塞问题的帖子。后来才知道,通过java.lang.process 调用本地程序的时候,需要将 process 缓存中的输出信息读取出来,不然就会造成进程的阻塞。

实现方法如下:

Process process = Runtime.getRuntime.exec(command); // 调用外部程序
final InputStream is1 = process.getInputStream();
new Thread(new Runnable() {
    public void run() {
        BufferedReader br = new Buffered(new InputStreamReader(is)); 
        while(br.readLine() != null) ;
    }
}.start(); // 启动单独的线程来清空process.getInputStream()的缓冲区
InputStream is2 = process.getErrorStream();
BufferedReader br2 = new Buffered(new InputStreamReader(is2)); 
StringBuilder buf = new StringBuilder(); // 保存输出结果流
String line = null;
while((line = br.readLine()) != null) buf.append(line); // 循环等待ffmpeg进程结束
System.out.println("输出结果为:" + buf);

可以参考这个帖子: http://www.iteye.com/topic/141606

你可能感兴趣的:(java,thread,百度,Office)