0

私は実行可能な Jar ファイルを持っています。シンプルにするために、デスクトップでダブルクリックするだけで実行できるようにしたいと考えています。私はこれを試しました:

if(args.length == 0){
        String path = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        String decodedPath = URLDecoder.decode(path, "UTF-8");
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec("java -jar \"" + decodedPath + "\" -arg");
        System.out.println("java -jar \"" + decodedPath + "\" -arg");
    }

無駄に。「-arg」引数をチェックするようにプログラムに指示し、そこにない場合、プログラムはコマンドラインから呼び出されたのではなく、実行可能ファイルから実行されたと見なされると思いました。プログラムでコマンド プロンプトを開き、その中で自分自身を実行して、前のプログラムを強制終了する方法はありますか?

4

3 に答える 3

0

同様の問題に対して私が行ったことは、JTextField入力JButton用と確認用のいくつかの を含む JAR ファイルに別の GUI プログラムを作成したことです。Stringボタンがクリックされると、配列内のこれらの値を使用して他のクラスのメイン メソッドが呼び出され、そのプログラムが起動され、GUI フォームが閉じられframe.setVisible(false)ます。そのようなことをすることをお勧めしますが、開発しているプログラムの種類によって異なります。

于 2013-06-14T22:28:04.473 に答える
0

また、必要なコマンドライン フラグを実行時に JRE に直接渡すこともできます。数週間前にこれを理解しましたが、java.library.pathこのコードをメイン メソッドの前に置くだけで、リフレクションを介して必要なライブラリ パスにアクセスして変更することができます。

try{
    System.setProperty("java.library.path", path);
    Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
    fieldSysPath.setAccessible( true );
    fieldSysPath.set( null, null );
}catch(Exception ex){
    // just exit and tell user that there was an error or something similar
}

とにかく、これがお役に立てば幸いです。同様のコードで多くの同様のことを行うこともできます。

于 2013-07-03T17:35:12.213 に答える