L4Jを使用して.exeに変換されたjarファイルと、appdataに別のjarファイルがあります。2つのファイルがある理由は、更新メカニズムが必要だからです。
私の質問:デスクトップで.exeファイルを実行し、そこからappdataにjarファイルをロードするにはどうすればよいですか?
L4Jを使用して.exeに変換されたjarファイルと、appdataに別のjarファイルがあります。2つのファイルがある理由は、更新メカニズムが必要だからです。
私の質問:デスクトップで.exeファイルを実行し、そこからappdataにjarファイルをロードするにはどうすればよいですか?
URLClassLoader
a を使用して、実行時に 2 番目の Jar をロードできます。
必要に応じて、「exe」から呼び出して2番目のJarを実行するブリッジングインターフェース(両方のJarに存在するもの)が必要になる場合があります...または、単に2番目のJarのmain
メソッドを使用することもできます;)
もう 1 つの選択肢は、別の JVM を実行することです。
アップデート
アプリケーションの 2 つの要素を物理的に分離するため。EXE(別名ランチャー)にラップされたJarと、アプリケーション(別名アプリケーション)である別のJarがあります(私は推測します)。
そう。ランチャーは、アプリケーションについてまったく知らないはずです (コンパイル時の依存関係はほとんどまたはまったくありません)。
どうにかして、ランチャーからアプリケーションを動的にロードする必要があります。そのためには、いくつかのことが必要です。
アプリケーションをランチャー クラス ローダー コンテキストにロードできるようにする必要があり (それを確認できるようにするため)、アプリケーションをロードできるようにする必要があります。
動的クラスローディング
これは、次を使用するだけで簡単に実現できます。URLClassLoader
URLClassLoader loader = new URLClassLoader(new URL[]{new File("path/to/your/jar/Application.jar").toURI().toURL()});
アプリケーションの読み込み
これは、2 つの方法のいずれかで実現できます。を使用して、アプリケーションクラスURLClassLoader
の起動を見つけることができます...main
// This is essentially the same as saying
// the.package.name.to.you.main.class.Main.main(new String[]{});
Class<?> mainClass = loader.loadClass("the.package.name.to.you.main.class.Main");
Method mainMethod = mainClass.getMethod("main", String[].class);
mainMethod.invoke(null, new String[]{});
アプリケーションの Jar にmain
メソッドがない場合は、上記の例を使用して、必要なほぼすべてのクラスを起動できます...
そのmyjar.jarを更新するよりも、クラスパスにatでjarを追加する必要があります(例: "c:\ mypath \ myjar.jar")。