このエントリーをはてなブックマークに追加

本記事は、Qiitaのこの記事と同一内容です。

目次

どうしてもJavaを使わないとできない処理をC#.netから起動する必要が出た場合、
その実装に困りますよね…
そこで参上!C#.netで.jarを実行するンジャー!!(ここまで茶番)

Java側のプログラム

java側のプログラムはmainメソッド(関数)を入れます。
main関数のコマンドライン引数”args”でC#から値を受け取ります。
下記サンプルプログラムでは、1つの引数でメッセージ:msgを受け取り、それを表示しています。

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		if (args.length <= 0) {
			System.out.println("出力メッセージなし");
		} else {
			System.out.println("出力メッセージ:" + args[0]);
		}
		// Enterキー入力待ち
		// 参考:https://stackoverflow.com/questions/26184409/java-console-prompt-for-enter-input-before-moving-on
		System.out.println("Press \"ENTER\" to exit...");
		Scanner scanner = new Scanner(System.in);
		scanner.nextLine();
	}

プログラムができたら、実行可能な.jarファイルを生成しましょう。

C#(.net)側のプログラム

C#側では、Processクラスのオブジェクトで.jarファイルを起動します。
.jarファイルは、C#(.net)の実行ファイルが生成されるDebug/Releaseフォルダに配置するとファイル指定が楽です。

// コマンドプロンプトを表示して実行する場合
Process.Start("java", "-jar (.jarファイル名orパス) (引数) (引数)…"))
// コマンドプロンプトを表示せずに実行する場合
Process.Start("javaw", "-jar (.jarファイル名orパス) (引数) (引数)…"))

.jarファイルの実行中にC#のプログラムを止めたい場合、WaitForExitメソッドを使いましょう。

// 終了待ち
jar.WaitForExit();

.jarファイルの実行結果は、ExitCodeメソッドで受け取れます。
※javaのmainメソッドが void main() なら、戻り値0で正常終了

// 結果取得(0:正常終了)
jar.ExitCode();

オブジェクトを作成しますので、usingやclose,disposeなどによるオブジェクト解放をお忘れなく。
参考:確保したリソースを忘れずに解放するには?[C#/VB]
実装例↓

        /// <summary>
        /// .jar実行
        /// </summary>
        /// <param name="msg">メッセージ</param>
        /// <returns>True:成功/False:失敗</returns>
        public static bool Excecute(string msg)
        {
            bool result = false;
            Process jar = null;
            try
            {
                // .jarをプロセスとして起動
                using (jar = Process.Start("java", "-jar Sample.jar " + msg))
                {
                    // 終了待ち
                    jar.WaitForExit();
                    // 結果取得(0:正常終了)
                    if (jar.ExitCode == 0) result = true;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("例外発生\n" + e.Message);
            }
            return result;
        }

あとはC#.netを実行するだけ…!
サンプルコード全体は下記リポジトリにあります。
CSJarソースコード

補足



←Next: [Excel VBA]要注意なExcel VBAコード
Previous: 資産運用としてのネット銀行