1

コンソールに「Hello World」を表示するhworld.classのhworldクラスがありますコードを使用してコンソールの別のクラスから実行しようとしています

 public class ftest2  
 {  
    public static void main(String[] arg)  
    {  
     System.out.println("NEW FILE PRINT LINE EXECUTED");
      try {  
            Process pro1 = Runtime.getRuntime().exec("javac hworld.java");  
            pro1.waitFor();  
            Process pro2 = Runtime.getRuntime().exec("java hworld");  
            pro2.waitFor();  
         } catch (Exception e) {    
               System.out.println("Some Error");   
               e.printStackTrace();     
                }  
    }  }   

ただし、ファイルを実行すると、Hello World の出力はコンソールに表示されません。
プログラムが起動して表示される

  NEW FILE PRINT LINE EXECUTED    

の代わりに

  NEW FILE PRINT LINE EXECUTED    
  HELLO WORLD    

HELLO WORLD の出力も表示する方法を教えてください。
(サンプルプログラムです。プログラムの出力を別のプログラム内に表示したい)

別のクラス内でクラスを呼び出してその出力を表示する別の方法がある場合。それからそれについて言及してください。

4

3 に答える 3

5

InputStreamプロセスのを読む必要があります。

ストリームは、このProcessオブジェクトによって表されるプロセスの標準出力ストリームからパイプされたデータを取得します。

ソース:http ://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Process.html#getInputStream ()

読み取りInputStreamと書き込みSystem.out

    InputStream inputStream = process.getInputStream();
    int b = -1;
    while ( (b =  inputStream.read()) != -1 ) {
        System.out.write(b);
    }
于 2012-12-30T13:47:41.440 に答える
1

プロセスの入力ストリームを System.out にリダイレクトする必要があります。次に例を示します。

public static void main(String[] arg) {
    System.out.println("NEW FILE PRINT LINE EXECUTED");
    try {
        Process pro1 = Runtime.getRuntime().exec("javac hworld.java");
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(pro1.getInputStream(), Charset.forName("UTF-8")))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

注: Java 7 の try with resources 構文を使用しますが、必要に応じて Java 6 に簡単に変換できます。

于 2012-12-30T13:48:43.630 に答える
0

例外が発生していて、それを印刷していない可能性があります。

public class ftest2  
 {  
    public static void main(String[] arg)  
    {  
     System.out.println("NEW FILE PRINT LINE EXECUTED");
      try {  
            Process pro1 = Runtime.getRuntime().exec("javac hworld.java");  
            pro1.waitFor();  
            Process pro2 = Runtime.getRuntime().exec("java hworld");  
            pro2.waitFor();  
         } catch (Exception e) {
            System.out.println("Some Error");
            e.printStackTrace(); 
         }  
    }  
} 

そして別の方法

public static void main(String[] arg)  
{  
     System.out.println("NEW FILE PRINT LINE EXECUTED");
     hworld.main(arg); // since main is a static method can be called w/o instance
}
于 2012-12-30T13:40:23.620 に答える