0

システムトレイアイコンを使用する比較的基本的なJavaプログラムがあります。コードを書いているときに使っていたパスは次のとおり"../images/logo.png"です。ただし、jarファイルにコンパイルすると、画像がシステムトレイに表示されません。代わりに、パスをに変更すると"./images/logo.png"、画像はjarファイル形式の場合はシステムトレイに表示されますが、テスト中は表示されません。

それは大きな問題ではありません。しかし、なぜこの矛盾が発生するのか知りたいです。

4

2 に答える 2

1

プログラムを.jarファイルにパッケージ化すると、ビルドはほとんどの場合、イメージを.jarファイルと同じディレクトリにコピーします。ただし、IDEでデバッグする場合、イメージファイルは1つ下のディレクトリにあります。

もう1つの可能性は、2つのシナリオで直接作業を異なる方法で設定していることです。

ちなみに、jarファイルに画像を埋め込むことに興味があるかもしれません 。https ://stackoverflow.com/a/1096491/24954を参照してください。

于 2013-02-03T07:04:09.933 に答える
0

この答えは2つのことに依存します。画像ファイルが埋め込まれているかどうか。

埋め込みリソース

アプリケーションをJarして、画像がアプリケーション内に埋め込まれると、通常のファイルアクセス方法は機能しなくなります。

次のようなことをしようとしています...

new ImageIcon("../images/logo.png");

また

new File("../images/logo.png");

動作しません。これは、リソースがファイルシステムのコンテキスト内のファイルではなくなったためです(実際にはJarのZipエントリです)。

代わりに、埋め込みリソースにClass#getResourceを返すを使用する必要があります。URL

new ImageIcon(getClass().getResource("../images/logo.png"));

うまくいくでしょう。ただし、一般的には、リソースへの絶対パスを使用することをお勧めします。これは、new ImageIcon(getClass().getResource("/images/logo.png"));一般的に中断が難しいためです(IMHO)

外部リソース

イメージへのパスは、アプリケーションの実行ポイントを基準にしています。

src開発では、画像リソースを見つけるためにディレクトリを(おそらくフォルダから)上に移動する必要があったかもしれません。これは、Jarファイルをフォルダに保存する必要があることを意味します。このフォルダでは、画像リソースを見つける前に1レベル上に移動する必要があります。

可能であれば、可能であれば、リソースをJar内に埋め込むことをお勧めします。パッケージ化する必要のあるファイルの数を減らすと、展開が容易になり、ユーザーがそれをいじるのが(少し)難しくなります;)

于 2013-02-03T07:05:00.103 に答える