Quantcast
Channel: プログラム の個人的なメモ
Viewing all articles
Browse latest Browse all 860

【Java】Java から別のJava(JARファイル)を実行するには...

$
0
0

サンプル

OtherJava.java

別プロセスとして実行したいJava。 OtherJava.jar にする
public class OtherJava {
  public static void main(String[] args) throws Exception {
    if (args == null || args.length < 1) {
      throw new IllegalArgumentException("Illegal Arguments");
    }

    String input = args[0];
    if (input.equals("error")) {
      System.err.println("error...");
      throw new Exception("error");
    } else if (input.equals("return_code_10")) {
      System.out.println("Return Code 10...");
      System.exit(10);
    }

    System.out.println("Hello World, " + input);
  }
}

Main.java

呼び出し側
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

  public static void main(String[] args) throws InterruptedException {
    System.out.println("Test0");
    execute("java", "-jar", "OtherJava.jar");
    Thread.sleep(1000L);
    System.out.println();

    System.out.println("Test1");
    execute("java", "-jar", "OtherJava.jar", "error");
    Thread.sleep(1000L);
    System.out.println();

    System.out.println("Test2");
    execute("java", "-jar", "OtherJava.jar", "return_code_10");
    Thread.sleep(1000L);
    System.out.println();

    System.out.println("Test3");
    execute("java", "-jar", "OtherJava.jar", "Mike");
    Thread.sleep(1000L);
    System.out.println();

    System.out.println("Done");
  }

  private static void execute(String... commands) {
    ProcessBuilder processBuilder = new ProcessBuilder(commands);

    try {
      Process process = processBuilder.start();
      int result = process.waitFor();
      System.out.println("Result Code : " + result);

      try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
        String line;
        while ((line = bufferedReader.readLine()) != null) {
          System.out.println(line);
        }
      }
      try (BufferedReader errorBufferedreader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
        String errorLine;
        while ((errorLine = errorBufferedreader.readLine()) != null) {
          System.err.println(errorLine);
        }
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}

出力結果

Test0
Result Code : 1
Exception in thread "main" java.lang.IllegalArgumentException: Illegal Arguments
	at com.sample.proc.OtherJava.main(OtherJava.java:6)

Test1
Result Code : 1
error...
Exception in thread "main" java.lang.Exception: error
	at com.sample.proc.OtherJava.main(OtherJava.java:12)

Test2
Result Code : 10
Return Code 10...

Test3
Result Code : 0
Hello World, Mike

Done


関連記事

【Java】プロセス情報(PIDなど) に関するあれこれ

https://blogs.yahoo.co.jp/dk521123/37013520.html

【Java】 外部プログラム/コマンドを実行するには ~ ProcessBuilder ~

https://blogs.yahoo.co.jp/dk521123/34842155.html

【Java】プロキシ設定のチェック機能を考える

https://blogs.yahoo.co.jp/dk521123/37181766.html

Viewing all articles
Browse latest Browse all 860

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>