- 浏览: 1008100 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
提要:我使用process是在用swftools转换pdf为swf文件时处理它的出错流和输入流信息,不处理会一直堵塞,并具要开启两个独立线程来处理,不然照样堵塞。下面的例程就是这个转换的处理。
在API中对waitFor()方法的说明是:
waitFor()
导致当前线程等待,如有必要,一直要等到由该 Process
对象表示的进程已经终止。
但是如果我们在调用此方法时,如果不注意的话,很容易出现主线程阻塞,Process也挂起的情况。在调用waitFor() 的时候,Process需要向主线程汇报运行状况,所以要注意清空缓存区,即InputStream和ErrorStream,在网上,很多只提到处理InputStream,忽略了ErrorStream。以下一段代码,贴出来,仅做参考。
package com.bolue.study; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; public class ChangeSwf implements Runnable { public void run() { String PATH_TO_SWF="D:\\Program Files\\SWFTools\\pdf2swf.exe"; String fromFilename="G:\\test\\read\\suanfa.pdf"; String saveFilename="G:\\test\\read\\xiaoxiaoxxx.swf"; List<String> commend = new java.util.ArrayList<String>(); commend.add(PATH_TO_SWF); commend.add("-o"); commend.add(saveFilename); commend.add("-t"); commend.add(fromFilename); commend.add("-s"); commend.add("languagedir="+"G:\\test\\read\\xpdf\\chinese-simplified"); ProcessBuilder builder = new ProcessBuilder(); builder.command(commend); System.out.println("---转换1开始---"); try { Process convertImgProcess = builder.start(); final InputStream is1 = convertImgProcess.getInputStream(); final InputStream is2 = convertImgProcess.getErrorStream(); new Thread() { public void run() { BufferedReader br = new BufferedReader( new InputStreamReader(is1)); try { String lineB = null; while ((lineB = br.readLine()) != null ){ if(lineB != null)System.out.println(lineB); } } catch (IOException e) { e.printStackTrace(); } } }.start(); new Thread() { public void run() { BufferedReader br2 = new BufferedReader( new InputStreamReader(is2)); try { String lineC = null; while ( (lineC = br2.readLine()) != null){ if(lineC != null)System.out.println(lineC); } } catch (IOException e) { e.printStackTrace(); } } }.start(); convertImgProcess.waitFor(); }catch (Exception e){ System.err.println(e); } System.out.println("---转换1结束---"); } }
发表评论
-
提取html内容放入xml文件时空格问题
2011-05-24 17:09 2643由于项目的需要,将网站上的信息抓取下来,提取出想要的信息,然后 ... -
简述URI和URL区别(转)
2011-04-20 16:23 1410URL:(Uniform Resoure Locato ... -
jsp页面乱码解决方案及编码设置问题(转)
2011-03-27 15:46 1832经常遇到关于JSP页面乱码的问题,在网上也查了相关的帖子,故在 ... -
使用JSTL标签异常
2011-01-02 09:48 1845我使用JSTL标签,如下所示: <c:when ... -
HSQL入门及使用指南 (转)
2010-12-27 22:29 2182HSQL可以到官方网站 ... -
使用POI读取Word207和Excel2007的例子 (转)
2010-12-26 16:19 2609天在写全文检索功能时,POI读取Word2007和Excel2 ... -
SSH session连接关闭问题的解决(转)
2010-12-15 22:12 21492008-07-20 22:25:27,531 INF ... -
svn和myeclipse使用搜狗浏览器代理
2010-12-11 16:42 18071 在svn里的setting功能选项中选择Network,勾 ... -
Kissy Suggest 自动提示例子
2010-12-10 14:45 3812由淘宝团队开发出来的Kissy Suggest 自动提示组件是 ... -
计算机开机启动过程详解(转)
2010-12-10 13:22 13831、http://product.zdnet.com. ... -
更强的自动补全提示:提示补全组件:Kissy Suggest(转)
2010-12-09 16:25 1054去年针对谷歌的搜索提示,发过一篇文章:从谷歌的一个Bug说 ... -
磁盘分区与文件系统(转)
2010-12-09 09:38 2042一个磁盘是分成一个个扇区来存放信息,整个磁盘的第一个扇区是作 ... -
QQ通信原理(转)
2010-12-02 21:52 6656QQ通信原理我研究的是QQ ... -
邮件激活
2010-11-17 09:34 1450今天看了一下公司做的网站,看到有关邮件激活的程序,就做下笔记。 ... -
HttpSessionBindingListener获取在线用户数(转)
2010-11-01 14:59 2364下面为我的测试 ... -
cookie的简单使用
2010-10-29 11:13 1570一、cookie的作用 在 ... -
Cookie工作原理(转)
2010-10-29 09:30 1818Cookies基础 Cookies是 ... -
swfobject的使用
2010-10-26 09:54 32181 swfobject可以将swf文件嵌入到网页内,它是一个j ... -
java获取当前工程名(转)
2010-10-24 09:14 1620String projectname = System.get ... -
利用Java编写简单的WebService实例(转)
2010-10-22 15:30 2736/* * File name: TestHell ...
相关推荐
`Process`对象的`waitFor()`方法会阻塞直到进程结束,返回值是进程的退出码: ```java int exitCode = process.waitFor(); System.out.println("Process exited with code: " + exitCode); ``` ### 6. 销毁进程 ...
原因是`process.waitFor()`会在输入流缓冲区填满之前阻塞,导致进程无法继续输出数据。为了解决这个问题,我们可以使用一个额外的线程来不断地从输入流中读取数据,这样就可以确保数据能够及时被处理,而不会堵塞...
这可能导致Java应用程序在调用`waitFor()`方法时出现阻塞。 解决此问题的一种方法是在调用`waitFor()`之前先读取DOS窗口的标准输出缓冲区的内容。可以使用Java的`BufferedReader`来实现这一点: ```java String ls...
为避免此问题,你需要在`waitfor()`之前读取并处理`Process`的标准输出,清空缓冲区。 在处理外部进程时,一定要注意异常处理,确保正确关闭输入、输出和错误流,避免资源泄漏。同时,考虑到跨平台兼容性,可能需要...
但是,需要注意的是,如果该命令是有标准输出或者是错误输出的话,必须在 waitFor 方法阻塞之前,通过读取 Process 对象的 getErrorStream 和 getInputStream 的内容来捕获所有的标准输出或者是错误输出。...
然而,在处理这些进程时,我们可能会遇到各种问题,其中一种常见的情况是调用`process.waitFor()`方法后返回值为1,这通常表示程序执行失败。本文将深入探讨这个问题,以及如何解决。 `waitFor()`方法是`Process`类...
int exitCode = process.waitFor(); if (exitCode == 0) { System.out.println("PDF生成成功"); } else { System.out.println("PDF生成失败,退出码:" + exitCode); } } catch (IOException | ...
例如,可以使用`ProcessBuilder.start()`方法创建新进程,`Process.waitFor()`方法使当前线程等待子进程完成,以及`Process.destroy()`方法来结束进程。 三、Java与操作系统进程状态的关系 Java虚拟机(JVM)自身...
需要注意的是,如果命令的执行时间过长,`waitFor()`方法也会阻塞较长时间,因此在实际应用中要考虑到这一点。 ### 总结 通过Java的`Runtime`类,我们可以轻松地执行外部的可执行文件和批处理文件。这种方式不仅...
总的来说,调用外部程序并处理阻塞问题的关键在于正确地读取和处理外部程序的输入/输出流,以及适当地使用`waitFor()`方法。在编写这类代码时,应考虑到各种可能的情况,确保程序的健壮性和正确性。此外,使用`...
在执行之后,可以使用`Process`对象的方法来管理这个子进程,比如`waitFor()`方法可以阻塞当前线程,直到子进程结束。 另外,文档中提到了使用批处理(Batch)文件进行操作。批处理文件通常包含一系列命令,可以一...
`process.waitFor()`会阻塞直到pdftotxt命令执行完毕,返回的`exitCode`用于检查命令是否成功执行。 这种方式的优点在于它允许你利用系统级别的资源来处理大文件,而不会过度消耗Java应用程序本身的内存。同时,...
// Wait for the child process to finish WaitForSingleObject(pi.hProcess, INFINITE); // Close process and thread handles. CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } ``` 在C#中,使用`...
当执行的DOS命令有大量标准输出时,可能会遇到一个常见的问题:DOS窗口不会自动关闭,导致Java程序在`waitfor()`方法处阻塞。这是因为标准输出缓冲区可能已满。为了解决这个问题,可以使用`Process`类提供的方法来...
为了防止输出缓冲区满导致`waitFor()`阻塞,我们需要捕获并处理这些输出。Java的`Process`类提供了`getInputStream()`和`getErrorStream()`方法来获取这些流。以下代码展示了如何读取脚本的输出: ```java ...
- 当被调用的DOS程序有大量的标准输出时,其DOS窗口可能不会自动关闭,导致`waitfor()`方法阻塞。这是因为输出缓冲区可能已满。为解决这个问题,你可以通过`Process`对象的`getInputStream()`方法获取标准输出流,...
`process.waitFor()`方法会阻塞直到命令执行完毕。 对于更复杂的命令,如需要参数、环境变量或者管道操作,可以使用`ProcessBuilder`类。例如,下面的代码创建了一个`ProcessBuilder`实例,设置了命令和参数,并将...
- **等待命令完成**:调用`process.waitFor()`来阻塞当前线程,直到命令执行完成。 - **清理资源**:确保关闭所有打开的流,并且在不再需要进程时调用`process.destroy()`。 3. **示例代码**: 以下是一个简单的...