LoginSignup
2
2

More than 3 years have passed since last update.

[.net、Java連携]C#.netで.jarを実行するンジャー

Last updated at Posted at 2021-01-09

本記事は、自分サイトのこの記事と同一内容です。

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

Java側のプログラム

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

Sample.java
    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]
実装例↓

ConnectJar.cs
        /// <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ソースコード

補足

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2