Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse使用运行时exec提供与cmd不同的输出_Java_Runtime_Cmd_Exec - Fatal编程技术网

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/内存”);在你的代码中,检查它!不要忽略错误流。如果你阅读它(在它自己的线程中),你会发现你做错了什么。