2009-05-12 15 views
2

このようなことが起こりうるかどうか疑問に思っています。 引数をとり、出力をコンソールに出力するJavaプログラムがあります。私が必要とするのは、複数回実行することです。(jarファイル)はスムーズに実行されますが、Javaランタイムの起動と停止のオーバーヘッドは大きなものです。 Javaランタイム(またはVM、私はそれを呼び出す方法がわからない)をインスタンス化する方法はありますか、何とかそのランタイムに何度か接続してjarを実行しますか?1つの実行時インスタンスでJavaプログラムを実行する

私は、Javaの用語について深刻な無知にもかかわらず、誰かが私の質問に答えることができることを願っています。

答えて

11

JARのメインクラスを呼び出すラッパークラスを書くのは簡単で、かつ繰り返し適切な引数でAppClass.main()を呼び出す必要があります。

// wraps class MyWrapped 
class MyWrapper { 

public static void main(String[] args) { 
    for (each set of command-line args) { 
     MyWrapped.main(arguments); 
    } 
} 

は、覚えていたJavaアプリケーションのmain()メソッドは何も特別なものではなく、あなた自身を呼び出すことができる静的メソッドです。これは、適切に設計されていれば、複数のスレッドで同時に呼び出すことさえできます。

+0

私はこれを2回投票できたらいいですか? ;) –

0

コードを複数回実行するメインラッパーを作成する方がよい場合があります。これらの言葉で考えてみてください。クラスファイルをインスタンス化し、必要な回数だけメソッドを呼び出します。

0

これをループで実行するだけの理由はありませんか?

0

明らかなアプローチは、インスタンス間のクラスをリロードしないことに注意してください。静的フィールドを変更した場合、フィールドは再初期化されません!

これが問題の可能性がある場合は、これに対処するために書き換えを検討してください。別のアプローチは、OSGiコンテナベースのソリューションを探しているかもしれません。別々のセグメントがお互いに見えるようにしないので、それぞれの呼び出しには独自のクラスがロードされます。

関連する問題