1

2つのjarファイルがあります。JarAでJarBを開き、Jar Aを終了させて​​、JarBを実行したままにします。どうすればこれを行うことができますか?

編集:JVMの1つのインスタンスでJarAを開き、JVMの新しいインスタンスでJarBを実行し、JarAがsystem.exit(0)を使用することを意味しました

4

4 に答える 4

1

他のJarを実行するために新しいJVMインスタンスを起動してから、終了しますか?これはそれほど一般的ではありません。

または、Jar Bをクラスパスに含めて、JarAのコード内からJarBが提供するクラスを使用することもできます。

于 2013-01-03T02:15:52.547 に答える
1

新しいJVMを開始するにはjava、他のOSコマンドと同じように外部プロセスを開始します。ProcessBuilderでドキュメントを参照してください。

 ProcessBuilder pb = new ProcessBuilder("java", "-classpath", "B.jar", "B.BMain");
 Process p = pb.start();

Javaで外部プロセスを開始する際の注意点はたくさんあります。ここでは、SOの検索Processと検索に関する多くの資料を見つけることができます。ProcessBuilder


jarファイルは実行または終了しません。つまりjvm、たとえばコマンドによって開始されjavaます。たとえば、次のコマンドを実行すると、次のようになります。

java -classpath A.jar A.Main

newjvmが開始されmain、クラスのメソッドが実行されますA.Main

これで、そのメソッドは、クラスパスにある場合は、のクラスのメソッドMain.main()を呼び出すことができます。B.jarたとえば、コマンドが

java -classpath A.jar;B.jar pkg.A

その後、A.Main.mainそこにあることができます

 B.SomeClass.SomeMethod()

どこBにありますかB.jar

これは、「B.jarを開く」と言うときの意味ですか?これは、他の「A.jar」を「閉じる」わけではないことに注意してください。

于 2013-01-03T02:26:01.360 に答える
0

以下の回答を読んだ後でも、親プロセス「JAR-A」に接続されていない別のJVMプロセスで「JAR-B」を呼び出したいと仮定すると、おそらく「cmd/」に似たものを使用するのが最善の策です。 start "(Windowsの場合)または'sh ...&'(* nixの場合)(JAR-AのJavaプログラムから)を使用する

于 2013-01-03T02:34:44.293 に答える
0

私は可能な部分的な答えを持っていました:

したがって、WindowsでJavaを使用している場合は、次を使用できます。 new ProcessBuilder("java", "-classpath", "B.jar", "B.Main").inheritIO().start();

これにより、プロセスが開始されるだけでなく、同じコマンドプロンプトウィンドウでプロセスが開始されます。JAR Aを終了するには、System.exit(0);プロセスBを作成した直後にJARAのmainメソッドにaを含めます。

Linuxビルドの場合、プログラムで同じ/類似の問題が発生しているため、よくわかりません。

Javaで新しいプロセスを作成し、現在のプロセスを終了します

編集:私は私の上記の質問に私の答えを投稿しました。:)

于 2020-07-26T16:04:05.927 に答える