3

L4Jを使用して.exeに変換されたjarファイルと、appdataに別のjarファイルがあります。2つのファイルがある理由は、更新メカニズムが必要だからです。

私の質問:デスクトップで.exeファイルを実行し、そこからappdataにjarファイルをロードするにはどうすればよいですか?

4

2 に答える 2

3

URLClassLoadera を使用して、実行時に 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メソッドがない場合は、上記の例を使用して、必要なほぼすべてのクラスを起動できます...

于 2012-09-20T20:30:58.460 に答える
1

そのmyjar.jarを更新するよりも、クラスパスにatでjarを追加する必要があります(例: "c:\ mypath \ myjar.jar")。

于 2012-09-20T20:28:46.300 に答える