0

だからここに私のコードがあります:

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 で Java CPU/CPU を実行すると、終了値が 0 の「hellohello」が表示されます

しかし、Eclipseで実行すると、終了値1で「こんにちは」が表示されます

何か案が?

4

2 に答える 2

2

コマンド文字列からの実行とEclipseからの実行ではシステム環境が異なります。

環境の変数は重要です: PATH、JAVA_HOME または JRE_HOME と現在の作業ディレクトリ。

あなたの「Java CPU /メモリ」のような外部プロセスに提供されている環境で確実でなければならない場合に、ProcessBuilderを使用します。

まず、外部プロセスの作業ディレクトリが間違っていると思います。ProcessBuilder では、次のように指定できます。

ProcessBuilder pb = new ProcessBuilder("java", "CPU/MEMORY");   
pb.directory(new File("/home/myhome/myjavaprojects"));
Process p = pb.start();
于 2012-10-06T22:56:14.993 に答える
0

ErrorStream を無視しないでください。それを(独自のスレッドで)読むと、何が間違っているかがわかります。

例えば:

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();
      }
   }

}
于 2012-10-06T22:52:22.613 に答える