EclipseはJARパッケージをエクスポートした後に画像をロードできませんか?
この問題の理由は、主にパスの問題が原因で、これはしばしばプロジェクトで通常実行されますが、瓶にパッケージ化されると、正常に表示することはできません。この問題を解決するための方法を要約しましょう。
1.外部リソースファイルを使用して解決します
プロジェクトをパッケージ化してJARを生成し、新しいフォルダーを作成し、プロジェクトで使用されているすべての画像ファイルを配置し、このディレクトリにJARファイルを生成しました。コードが画像ファイルを正しく参照している限り、ImageIcon image = new ImageIcon(SwingResourceManager.getImage( "Icons/logo.gif"));
このようにして、画像ファイルとクラスファイルは一緒にパッケージに配置されません。クラスファイルはパッケージにあり、画像ファイルはプロジェクトルートディレクトリにあります。
2。内部リソースファイルを使用して解決します
プロジェクトパッケージで使用されている画像ファイルを配置し、パッケージングの場合、画像ファイルがJARファイルに同時に入力されます。この方法は、特定のコードで次のいずれかを使用する必要があります。
ImageIcon Image = new ImageIcon(this.class.getResource( "Icons/logo.gif"));
以下は、この方法の詳細な説明です。
グラフィカルインターフェイスのプログラムを作成するときは、さまざまな画像リソースを使用する必要があります。それで、あなたがあなたのプログラムを公開するとき、あなたはこれらの画像リソースをどのように公開しますか?
最も簡単な方法は、これらの画像リソースをクラスファイルと一緒に実行可能なJARファイルにパッケージ化することです。そのため、すべてのコンテンツを含めるためにJARファイルを公開するだけで、ユーザーはJARファイルをダブルクリックするだけでプログラムを実行できます。 JARファイルに写真をパッケージ化する場合、プログラムを作成するときにこれらの写真にどのようにアクセスしますか?
これらの写真のパスは何ですか? GetResource()メソッドを使用して、この問題を解決できます。
ここでは、2つの最も一般的な状況を分析します。
1.すべてのリソースをAndy.jarにパッケージ化すると、クラスはパッケージにあります。パッケージAndycpp;すべての画像リソースは画像フォルダーに配置され、画像フォルダーはAndycppパッケージにも含まれています。このようにして、最終的なパスは次のとおりです。
Andy.jar
| __andycpp
| __ guitest.class
| __画像
| __ snap1.jpg
画像フォルダーとそれを参照するクラスは同じレベルにあるため、相対パスを介してアクセスできます。
java.net.url imgurl = guitest.class.getResource( "Images/snap1.jpg"); ImageIcon IMG1 = new ImageIcon(Imgurl);
ここに注意する必要があるのは、ケースの問題です! JARファイルの内部はケースに敏感であるため、画像自体がsnap1.jpgと呼ばれ、画像/snap1.jpgへのパスを書き込むと、画像は見つかりません。また、各クラス(注、オブジェクトではない)にはgetResource()メソッドがあることにも注意する必要がありますが、さりげなく使用することはできません。画像フォルダーと同じレベルのクラスのgetResource()メソッドのみを使用できます。たとえば、上記の図では、Guitestクラスと画像は同じレベルにあるため、このクラスのGetResource()メソッドを使用する必要があります。
2。別のケースでは、多くのクラスがあり、パッケージ構造が非常に複雑である場合、写真とクラスを同じレベルに配置することはまずありませんが、写真を最も外側のレイヤーに置き、すべてのクラスに絶対パスを介して写真にアクセスできるようにする必要があります。
Andy.jar
| __andycpp
| __ guitest.class
| __画像
| __ snap1.jpg
コードは次のとおりです。
java.net.url imgurl = guitest.class.getResource( "/images/snap1.jpg"); imageicon img1 = new imageicon(imgurl);
上記のコードとの違いを見たことがありますか?違いは非常に微妙です。 「画像」の前にバックスラッシュ「/」を追加するだけです。このバックスラッシュはルートディレクトリを表し、バックスラッシュは相対パスを表していません。
上記の記事では、Javaパッケージング画像の瓶へのパスの問題について簡単に説明しています。私があなたと共有したすべてのコンテンツです。私はそれがあなたに参照を与えることができることを願っています、そしてあなたがwulin.comをもっとサポートできることを願っています。