私はJavaアプリケーションを持っています。いくつかのコマンドラインフラグで開始できます。ユーザーがアプリケーションを「再起動」する機能を提供したい。
現在、引数を制御ファイルに保存し、アプリケーションを再起動するときにそれを読み取ります。アプリケーションを再起動するための最良の方法は何ですか?コマンドライン引数を保持するにはどうすればよいですか?
RuntimeMXBean を使用すると、クラスパス、ブートクラスパスなどを取得できます。
package com;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
class JMXTest {
public static void main(String args[]) {
try {
for ( int i = 0 ; i < args.length ; i++ )
System.out.println( "args :" + args[i] );
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
System.out.println( "boot CP:" + mx.getBootClassPath() );
System.out.println( " CP:" + mx.getClassPath() );
System.out.println( "cmd args:" + mx.getInputArguments() );
}
catch( Exception e ) {
e.printStackTrace();
}
}
}
new を使用して呼び出す
java -jar appname.jar arg1 arg2
を使用して現在のものを閉じる
System.exit(0);
ここでは、引数を保持するという問題に直面することはありません
Java アプリからコマンドを呼び出す例を次に示します。
とにかく、コマンドライン引数を永続化する必要があります。引数のセットがかなり固定されている場合は、この引数のセットを使用して Java を呼び出すだけの小さなバッチまたはシェル スクリプト ファイルを作成することを検討してください。
引数を指定して 1 回だけ起動し、引数を指定せずにアプリケーションを再起動する場合は、前の呼び出しの引数を使用するようにするには、次のようにします。
public static void main(String[] args) {
if (args.length == 0)
args = readArgsFromFile();
else
writeArgsToFile();
// ...
}
補足: 簡単にするために、 を再利用しましargs
た。より良いコードを作成するには、必要に応じて、受信または格納されたパラメーターを別のデータ構造、別の配列、Properties インスタンスなどにコピーします。
再起動時にディスクからオブジェクトをシリアル化して再度作成してみませんか?
これを行うには、クラスにSerializable
インターフェースを実装する必要があります。"CommandLineParams"
それがあなたがやろうとしていることを達成するための最も構造化された方法だと思います。
ユーザーのOSによって異なりますが、どうしてもやりたい場合はOSクロスプラットフォーム対応。次に、開始スクリプトを提供する必要があります。Linux の場合は shell、Windows の場合は OS / bat のように、これらのスクリプトはクラスパスと引数を設定します。
アプリケーションに「再起動」ボタンを作成することは賢明な決定ではないと思いますが、「Eclipse 再起動」のようなものが必要な場合は、起動クラスパスを取得できる RuntimeMXBean を確認する必要があります。