Java Eclipse使用运行时exec提供与cmd不同的输出
这是我的代码:Java Eclipse使用运行时exec提供与cmd不同的输出,java,runtime,cmd,exec,Java,Runtime,Cmd,Exec,这是我的代码: System.out.print("hellow"); try { int x; Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("java CPU/memory"); BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
System.out.print("hellow");
try {
int x;
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java CPU/memory");
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
while((line = in.readLine())!=null) {
System.out.println(line);
}
proc.waitFor();
} catch (Throwable t)
{
t.printStackTrace();
}
$
当我在cmd中运行javacpu/CPU时,我得到
退出值为0的“hellowhello”
但是当我在eclipse中运行它时
退出值为1的“hello”
有什么想法吗?不要忽略错误流。如果你阅读它(在它自己的线程中),你会发现你做错了什么 例如:
import java.io.*;
public class Foo001 {
public static void main(String[] args) {
System.out.println("hellow");
try {
int x;
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java CPU/memory");
final BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
final BufferedReader err = new BufferedReader(new InputStreamReader(
proc.getErrorStream()));
new Thread(new ReadLiner(in, "in")).start();
new Thread(new ReadLiner(err, "err")).start();
// proc.waitFor(); // not sure that this is needed
} catch (Throwable t) {
t.printStackTrace();
}
}
}
class ReadLiner implements Runnable {
private BufferedReader br;
private String text;
public ReadLiner(BufferedReader br, String text) {
this.br = br;
this.text = text;
}
@Override
public void run() {
String line = null;
try {
while ((line = br.readLine()) != null) {
System.out.println(text + ": " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在从命令字符串执行和从Eclipse执行方面,您有不同的系统环境 环境变量很有价值:PATH、JAVA_HOME或JRE_HOME以及您当前的worikng目录 我使用ProcessBuilder的情况下,当我必须确保在环境中,这是为像您的“java CPU/内存”这样的外部进程提供的 我认为首先你的外部进程有错误的工作目录。 在ProcessBuilder中,您可以使用以下命令指向它:
ProcessBuilder pb = new ProcessBuilder("java", "CPU/MEMORY");
pb.directory(new File("/home/myhome/myjavaprojects"));
Process p = pb.start();
您正在执行rt.exec(“java CPU/内存”);在你的代码中,检查它!不要忽略错误流。如果你阅读它(在它自己的线程中),你会发现你做错了什么。