4

私はJavaアプリケーションを持っています。いくつかのコマンドラインフラグで開始できます。ユーザーがアプリケーションを「再起動」する機能を提供したい。

現在、引数を制御ファイルに保存し、アプリケーションを再起動するときにそれを読み取ります。アプリケーションを再起動するための最良の方法は何ですか?コマンドライン引数を保持するにはどうすればよいですか?

4

5 に答える 5

2

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();
        }
    }
}
于 2010-10-04T12:19:06.033 に答える
1

new を使用して呼び出す

java -jar appname.jar arg1 arg2  

を使用して現在のものを閉じる

System.exit(0);   

ここでは、引数を保持するという問題に直面することはありません

Java アプリからコマンドを呼び出す例を次に示します

于 2010-10-04T12:02:26.690 に答える
1

とにかく、コマンドライン引数を永続化する必要があります。引数のセットがかなり固定されている場合は、この引数のセットを使用して Java を呼び出すだけの小さなバッチまたはシェル スクリプト ファイルを作成することを検討してください。

引数を指定して 1 回だけ起動し、引数を指定せずにアプリケーションを再起動する場合は、前の呼び出しの引数を使用するようにするには、次のようにします。

public static void main(String[] args) {

   if (args.length == 0)
     args = readArgsFromFile();
   else
     writeArgsToFile();

   // ...

}

補足: 簡単にするために、 を再利用しましargsた。より良いコードを作成するには、必要に応じて、受信または格納されたパラメーターを別のデータ構造、別の配列、Properties インスタンスなどにコピーします。

于 2010-10-04T12:10:38.793 に答える
0

再起動時にディスクからオブジェクトをシリアル化して再度作成してみませんか?

これを行うには、クラスにSerializableインターフェースを実装する必要があります。"CommandLineParams"

それがあなたがやろうとしていることを達成するための最も構造化された方法だと思います。

于 2010-10-04T12:29:50.823 に答える
0

ユーザーのOSによって異なりますが、どうしてもやりたい場合はOSクロスプラットフォーム対応。次に、開始スクリプトを提供する必要があります。Linux の場合は shell、Windows の場合は OS / bat のように、これらのスクリプトはクラスパスと引数を設定します。

アプリケーションに「再起動」ボタンを作成することは賢明な決定ではないと思いますが、「Eclipse 再起動」のようなものが必要な場合は、起動クラスパスを取得できる RuntimeMXBean を確認する必要があります。

于 2010-10-04T12:21:41.140 に答える