http://community.csdn.net/Expert/topic/3165/3165480.xml?temp=.5368158
以上是我前不久问的一个问题,是Runtime.getRuntime.exec()执行太久后出现的问题。
现在遇到是执行太快遇到的问题。
情况如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class RuntimeTest
{
public static void main(String[] args)
{
try
{
Process process=Runtime.getRuntime().exec("/mnt/d/bk/test");
BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));
while(br.readLine()!=null)
{
}
process.waitFor();
System.out.println(process.exitValue());
}
catch(Exception e)
{
}
}
}其中test中的内容是:
#!/bin/sh
exit 99可是执行结果打印出来是0,实际应该是99啊!
修改test为
#!/bin/sh
sleep 0.01
exit 99打印结果就是99了,这是怎么回事?
以上是我前不久问的一个问题,是Runtime.getRuntime.exec()执行太久后出现的问题。
现在遇到是执行太快遇到的问题。
情况如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class RuntimeTest
{
public static void main(String[] args)
{
try
{
Process process=Runtime.getRuntime().exec("/mnt/d/bk/test");
BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));
while(br.readLine()!=null)
{
}
process.waitFor();
System.out.println(process.exitValue());
}
catch(Exception e)
{
}
}
}其中test中的内容是:
#!/bin/sh
exit 99可是执行结果打印出来是0,实际应该是99啊!
修改test为
#!/bin/sh
sleep 0.01
exit 99打印结果就是99了,这是怎么回事?
exit 99
可是结果其却和在Linux中不同,可以得到99
P4,Redhat 7.2,JDK build 1.4.1-b21
我在上述平台上也碰到了这个问题,在Linux启动后,第一次执行
JAVA程序时,返回值正确,以后似乎是随机出现0和正确的值。
但在P3的机器上就没有问题。
使用JDK1.5来编译程序再运行也没有问题。
你可以参考一下。
基本配置是这样的:
P4,Redhat9.0,JDK 1.4.1
那我到其它平台试试看
输出都是:99,正如预期的!
不用sleep 0.01也能输出99? 我昨天还在Redhat9.0中试了一下,还是0
:(
haha
exit 99>RuntimeTest.java
public class RuntimeTest { public static void main(String[] args) {
try {
Process process=Runtime.getRuntime().exec("test.bat");
StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(), "ERROR");
// kick off stderr
errorGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(process.getInputStream(), "STDOUT");
// kick off stdout
outGobbler.start();
process.waitFor();
System.out.println(process.exitValue());
} catch(Exception e) {}
}
}
>StreamGobbler.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;public class StreamGobbler extends Thread {
InputStream is;
String type;
OutputStream os;
StreamGobbler(InputStream is, String type) {
this(is, type, null);
} StreamGobbler(InputStream is, String type, OutputStream redirect) {
this.is = is;
this.type = type;
this.os = redirect;
}
public void run() {
try {
PrintWriter pw = null;
if (os != null)
pw = new PrintWriter(os);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null) {
if (pw != null)
pw.println(line);
System.out.println(type + ">" + line);
}
if (pw != null)
pw.flush();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
因为可能是环境的问题,我这里不能重现你那里的现象。----linux
我测试的jdk
java version "1.4.2_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
Java HotSpot(TM) Client VM (build 1.4.2_05-b04, mixed mode)linux核心:2.4.18。
CPU:赛杨1.7----windows 2000
j2sdk1.4.2_02
P4 2.8E以上两个平台都是对。
StreamGobbler类中没有start()方法?
刚才我看了一本电子书《More Java Pitfalls》,和有你提供的一样的例子
test.sh
exit 99当我编译后运行四次,结果如下:
[dexiang@localhost test]$ java RuntimeTest
99
[dexiang@localhost test]$ java RuntimeTest
99
[dexiang@localhost test]$ java RuntimeTest
0
[dexiang@localhost test]$ java RuntimeTest
0
×××××××××××××××
这是为什么?
java -version
看看到底运行的是什么版本的jdk或者jre。
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode):(
不过我也曾经碰到过类似的ibm的jdk1.3在多cpu下,只要运行javac、java、javaw就会出现3个以上的java或javaw进程。不过只有在一台由客户自己安装的机器上才会出现,我们自己的服务器上就没有。像碰到这种妖怪,也真是没辙!
http://community.csdn.net/Expert/topic/3165/3165480.xml?temp=.5368158
中谈到的问题,如果可以的话就可以结贴了。
不知道jdk1.5的情况会不会好点:(
都可以了:)