- 浏览: 199878 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hankcs:
专门登陆来评论,这篇文章真差劲!
JAVA中assert使用[转] -
loyy77:
zengbin163 写道你上面的代码我执行时没有问题的我的J ...
JAVA中assert使用[转] -
guji528:
负数左移操作导致溢出现象:
byte b = -15; //负 ...
二进制、八进制、十六进制[转] -
guji528:
解说得很详细:
调试FileInputStream.read( ...
二进制、八进制、十六进制[转] -
m_desire2010:
非常清晰的思路!支持楼主!
斐波那契数(JAVA实现)
碰到一个项目需要从Java中运行Perl程序,这个Perl程序调用客户的Web service,每次发送一个请求,接受一个响应。Java程序中包含多个请求,需要多次调用Perl程序,并且接受和解析响应(这个烂设计可不是我干的,我实在不明白强大的Java Web Service为什么要弄成这样,不过客户是老大)。使用Java Runtime的exec()方法,发现运行一段时间后,进程就被挂起了(之前的响应完全正确)。于是分析原因,发现我在运行exec()方法后,立刻执行了Process的waitFor()方法,这里出了问题。在网上找到一篇文章讲述这个问题: 地址:http://brian.pontarelli.com/2005/11/11/java-runtime-exec-can-hang/ Java Runtime exec can hangNovember 11, 2005 on 4:40 pm | In Java |The next version of Savant is going to focus heavily on the stand-alone runtime and support for dialects and plugins. Supporting all that is largely handled by using a simple executor framework I wrote around Java 1.4 and lower’s Runtime.exec method. A few things to keep in mind when using this:
|
正好解决了我心中的疑问,非常感谢!
我们的程序一开始就是exec完了接着waitFor(),但bat文件执行不完整:
Process proc = Runtime.getRuntime().exec(cmd);
proc.waitFor();
后面的build中在waitFor()之前读取了数据流,bat文件就可以完整执行了:
Process proc = Runtime.getRuntime().exec(cmd);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "Error");
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "Output");
errorGobbler.start();
outputGobbler.start();
proc.waitFor();
class StreamGobbler extends Thread {
InputStream is;
String type;
StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
if (type.equals("Error"))
LogManager.logError(line);
else
LogManager.logDebug(line);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
TestPrint.bat:
echo P1=%1 >D:\2.1.2env\2.1.2home\CompuSet\output\TestPrint.log
echo P2=%2 >>D:\2.1.2env\2.1.2home\CompuSet\output\TestPrint.log
echo P3=%3 >>D:\2.1.2env\2.1.2home\CompuSet\output\TestPrint.log
echo P4=%4 >>D:\2.1.2env\2.1.2home\CompuSet\output\TestPrint.log
echo P5=%5 >>D:\2.1.2env\2.1.2home\CompuSet\output\TestPrint.log
echo P6=%6 >>D:\2.1.2env\2.1.2home\CompuSet\output\TestPrint.log
Bad_TestPrint.log:
P1=C:\xPression\CompuSet\output\MartyTestOut1.afp
P2=Literal1
P3="Rick Skinner"
P4=Parameter3
Good_TestPrint.log
P1=C:\xPression\CompuSet\output\MartyTestOut1.afp
P2=Literal1
P3="Rick Skinner"
P4=Parameter3
P5=Parameter4
P6=Parameter5
评论
发表评论
-
window.open()的所有参数列表
2009-04-08 16:32 1307前言:经常上网的朋友可能会到过这样一些网站, ... -
JAVA如何调用DOS命令
2008-10-06 22:04 1567用Java编写应用时,有时需要在程序中调用另一个现成的可执行程 ... -
一个字符串中如何得到汉字的个数?
2008-09-11 18:06 2400最近碰到了一面试题:一个字符串中如何得到汉字的个数?比如&qu ... -
一道面试题
2007-08-02 20:35 1031We are hiring intermediate or e ... -
DOUBLE值四舍五入
2007-08-02 20:29 2194API里没有现成的方法 public static ... -
斐波那契数(JAVA实现)
2007-07-15 13:26 16597求Fibonacci数列的前20个数。该数列有如下特点: 第1 ... -
如何得到一个字符串中汉字的个数?
2007-07-08 11:47 3207最近碰到了一面试题:一个字符串中如何得到汉字的个数?比如& ... -
JAVA转义符
2007-06-28 17:45 24396转义序列 含义 \n 回车(\u000a) \t 水平制表 ... -
防止重复提交
2007-06-25 14:34 1375//prevent to submit repeatedly ... -
JavaBean的属性[转]
2007-06-01 10:37 1521JavaBean的属性与一般Java程序中所指的属性,或者说与 ... -
JavaScript中数字的比较
2007-05-23 18:38 3739错误代码: js 代码 ... -
正则表达式大全(regular expression)[转]
2007-05-23 11:37 4771前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了 ... -
二进制、八进制、十六进制[转]
2007-05-16 22:25 7774这是一节“前不着村 ... -
JSP 分页显示[转]
2007-05-14 10:26 3097java 代码 <%@ page cont ... -
Re: Runtime.exec()的使用
2007-05-11 15:10 1650问:为什么Runtime.exec("ls" ... -
抽象类和接口的区别
2007-05-11 14:56 6193抽象类和接口在语法和 ... -
关于java异常处理机制的深入理解[转自编程爱好者]
2007-05-07 17:30 23741 引子 try…catch…finally ... -
JAVA中assert使用[转]
2007-05-07 16:52 21894assert是在J2SE1.4中引入的新特性,assertio ... -
refactoring 1
2007-04-25 16:45 15741,Although the condition " ... -
精妙SQL
2007-04-24 14:39 3682下列语句部分是Mssql语 ...
相关推荐
BIO(Blocking I/O)是阻塞式IO,数据读写时程序会挂起,直到操作完成。NIO(New I/O)是非阻塞式IO,通过使用缓冲区和选择器来提供性能。AIO(Asynchronous I/O)是异步IO,允许IO操作进行的同时,程序继续执行...
当一个进程的时间片用完后,该进程就会被挂起,并将CPU分配给下一个就绪进程。如果当前进程在时间片结束前完成,则可以提前释放CPU。 这种调度方法的主要优点包括: - **公平性**:所有进程都能得到公平的服务。 - ...
应妥善处理这些输出,避免程序因未捕获的异常而挂起。 2. **进程管理**:执行的外部进程可能会创建子进程。如果需要确保所有相关进程都被结束,可能需要使用更复杂的逻辑来跟踪和终止它们。 3. **权限问题**:终止...
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 22、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把...
线程的生命周期通常经历四个阶段:新建、运行、挂起和死亡。新建的线程具备运行条件,但必须调用start方法才能开始执行。run方法是线程的主要执行体,可以重写自定义线程的行为。挂起状态可能由CPU资源切换、sleep...
- **TCP四次挥手、TIME_WAIT作用、保活机制**:四次挥手完成连接关闭,TIME_WAIT状态确保所有数据包被接收,保活定时器防止连接挂起。 以上是对后端开发基础知识的整理,涉及广泛的主题和技术点,旨在帮助开发者...
它要完成以下三件事:将分配程序标识为已经初始化,找到系统中最后一个有效内存地址,然后建立起指向我们管理的内存的指针。这三个变量都是全局变量: 清单 1. 我们的简单分配程序的全局变量 int has_...
它首先同步所有挂起的操作,然后根据传入的原因选择合适的重启模式。 4. **注意事项**: - 使用API接口重启时,需要注意不同版本的Android系统可能存在差异,因此在实际开发中应考虑兼容性问题。 - 调用API接口...
- **SUSPENSION_STATE_** (TINYINT):挂起状态。 - **TENANT_ID_** (VARCHAR):租户ID。 #### 结论 通过对Activiti-5.21版本中的库表结构进行分析,我们可以清晰地了解这些表的作用及其之间的关联。这些表不仅涵盖...