0

私はSwingを使用して小さなJavaアプリケーションを開発しています。これは、Windows/LinuxおよびMacOSで実行されることになっています。

最終的には、同じフォルダーにいくつかの構成ファイルが含まれる実行可能なjarとして出荷されます。それらをロードするには、jarがプログラム内に保存されているフォルダーへのパスが必要です。これまたはこれ
のようなスレッドがすでにいくつかあります。

私の問題は、Eclipse内からプログラムを実行するか、次のようなターミナルから実行可能なjarを呼び出すと、そこで説明されているすべてのソリューションが正常に機能することです。

java -jar /path/to/jar/jarfile.jar

ただし、CinnamonまたはGnomeのjarファイル(ほとんどのユーザーが知っていることです)をクリックすると、正しいパスが取得されません。(MacOSユーザーは同じ問題を報告します)

これが私がこれまでに試したことであり、ダブルクリックで実行した場合の出力は次のとおりです(Eclipseまたはターミナルから実行した場合、これらはすべて目的のパスを表示します)。

ClassLoader.getSystemClassLoader().getResource(".").getPath()
Output: file:/usr/lib/jvm/java-6-openjdk-common/jre/lib/ext/pulse-java.jar!/

SomeClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
Output: ./

System.getProperty("user.dir");
Output: /home/myusername

それを行う他の方法はありますか、それともjarをエクスポートするときに何か間違ったことをしていますか?どんな助けでもいただければ幸いです!

乾杯ニック

4

3 に答える 3

1

シンプルにし、起動スクリプト(.bat / .shファイル)を使用してアプリケーションを実行します。この起動スクリプトは、ファイルシステム内の独自の場所のパスを取得し、それを引数またはシステムプロパティとしてJavaアプリケーションに渡します。これには、ヒープのサイズなど、他の引数を渡すことができるという追加の利点があります。

Windowsでは、%~dp0は実行されたbatファイルを含むディレクトリのパスです。Unixでは、を使用できます$(dirname $0)

于 2012-12-16T13:19:57.317 に答える
0

すべての構成ファイルをリソースとしてjarに保存し、それらをhome.dir +".AppName/"のファイルにコピーできます。

構造化された構成データがほとんどない場合、Preferences APIPreferences.systemNodeForPackageは、それ自体が苦痛であるため、最も賢明な代替手段のようです。inputStreamインポートする方法があります。初期構成テンプレートは、jar内のリソースである可能性があります。

于 2012-12-16T13:37:33.430 に答える
0

System.getProperty( "java.class.path")を使用してクラスパスを取得し、それをスキャンして「.jar」名を探します。パスセパレータはOSに依存することに注意してください(File.pathSeparator)

于 2012-12-16T13:50:07.450 に答える