2016-03-21 8 views
1

画像アイコンに問題があります。私はこれが以前に尋ねられたことを知っていますが、私は問題が異なると思うので、これを修正する方法を理解できません。 Eclipseを使ってアプリを起動すると、すべて動作します。しかし、私はそれを実行可能な瓶にすると、画像を表示しません。Jarは画像を表示しません

私ImagesHolderクラスのいくつかのコード:

package Clicker; 

import javax.swing.ImageIcon; 

public class ImagesHolder { 

     final public ImageIcon AccessoriesIcon = new ImageIcon("Images/Part_Accessories.png"); 
     final public ImageIcon BodyIcon = new ImageIcon("Images/Part_Body.png"); 
     final public ImageIcon BrakesIcon = new ImageIcon("Images/Part_Brakes.png"); 
     final public ImageIcon CoolingIcon = new ImageIcon("Images/Part_Cooling.png"); 
     final public ImageIcon ElectronicsIcon = new ImageIcon("Images/Part_Electronics.png"); 
     final public ImageIcon EngineIcon = new ImageIcon("Images/Part_Engine.png"); 
     final public ImageIcon ExaustIcon = new ImageIcon("Images/Part_Exaust.png"); 
     final public ImageIcon FuelIcon = new ImageIcon("Images/Part_Fuel.png"); 
     final public ImageIcon InteriorIcon = new ImageIcon("Images/Part_Interior.png"); 
     final public ImageIcon SteeringIcon = new ImageIcon("Images/Part_Steering.png"); 
     final public ImageIcon SuspensionIcon = new ImageIcon("Images/Part_Suspension.png"); 
     final public ImageIcon TransmissionIcon = new ImageIcon("Images/Part_Transmission.png"); 
     final public ImageIcon TiresIcon = new ImageIcon("Images/Part_Tires.png"); 

そして、私はURLとしてイメージを作る場合、私はここのような画像アイコンを、リセットすることはできません(私はラベルを持っていると私はラベルのアイコンを変更したい)

ラベル例:

public JLabel AccessoriesLVL1Label = new JLabel(ImagesHolder.LockedIcon); 
    AccessoriesLVL1Label.setHorizontalTextPosition(JLabel.CENTER); 
     AccessoriesLVL1Label.setVerticalTextPosition(JLabel.BOTTOM); 
     AccessoriesLVL1Label.setText("<html>Accessories LVL 1<br>" + "Count: " + Part.parts[1]); 

と変更:

if(CarMain.main[5] >=1){ 
      jbtnSellAccessoriesLv1.setEnabled(true);  
      Labels.AccessoriesLVL1Label.setIcon(ImagesHolder.AccessoriesIcon);   
     } 

編集: Iこの場合:私は、この行でエラーが発生します

URL MoneyIcon = ImagesHolder.class.getResource("/Money.png"); 

:として

final public ImageIcon MoneyIcon = new ImageIcon("Images/Money.png"); 

メイク

Labels.MoneyLabel.setIcon(ImagesHolder.MoneyIcon); 

エラー:

The method setIcon(Icon) in the type JLabel is not applicable for the arguments (URL) 
+0

まず最初に、それらが瓶の中にあることを確認しましたか?ちょうどその場合... –

+0

@ user3272243はい、私はzipとしてjarファイルを開いて、すべての画像がありました。しかし、彼らはイメージフォルダではなく、メインであった。私はイメージの場所を変更しようとしましたが(イメージがメインフォルダにある場合は動作します)、まだ画像は表示されませんでした。 – MsCrelix

+0

"正しい場所"へのジップであるかのように彼らが働きます?その場所でそれらを配置する絶対的なルートを使用することも試してみてください。もしそのジャーが動作していない場合、またはあなたの側に問題がある場合、そのジャーがその方法で廃棄するかどうかを確認してください。 –

答えて

2

これまでの回答をまとめると、 ダークナイトが提案したように、classloaderを使用することが考えられます。さらに、設定する前に新しいImageIconを作成するだけで済みます。

URL MoneyIcon = ImagesHolder.class.getResource("/Money.png"); 
Labels.MoneyLabel.setIcon(new ImagesIcon(ImagesHolder.MoneyIcon)); 

あなたのコードをもう一度見れば、それはうまくいきません。つまり、ImageIconを設定したいのですが、最後にはURLオブジェクトです。これがエラーを投げなければならないことは理にかなっているはずです。 Andrew Thompsonはすでにこう言っています。上記のように表示/説明されたURLからImageIconを構築することができます。多分あなたは単に '平野のJava(無ビルドツール)を使用している場合、この:

そして、あなたはまた、あなたが(ソースからコンパイルした構造を取得)ディレクトリに問題があったことを説明したので、私はさらに読書のためのいくつかのリンクを追加したいですリンクは助けることができる:Copying data files upon build in Java/Eclipse。主にEclipse向けに書かれていますが、他のほとんどのIDEでも同様のオプションを提供するはずです。

私の現在のプロジェクトからは、Mavenのようなツールを使うことをお勧めします。小規模なプロジェクトの場合は、少し上にあるかもしれませんが、多くの作業(例えば、ライブラリの取り扱い、画像などのリソースの処理など)が必要です。これらはあなたの役に立つかもしれない部分です。これが興味のあるものなら、Maven(またはAntとGradleのような他のツール)が非常に一般的に使用されているので、Web上で多くの有用なリソースを見つけることができます。

3

jarファイルから画像を取得する方法があります。

プロジェクトルートの下にリソースディレクトリを作成し、ソースコードディレクトリのリストに入れるのが理想的です。これにより、そこにあるすべてのイメージがJARにコピーされます。 resources/imageというサブディレクトリを作成すると、イメージディレクトリを持つJARが生成されます。

classloader.getResourceAsStream("/image/image1.jpg"); 

または、

classloader.getResource("/image/image2.jpg"); 

は、詳細例のためthisのリンクを参照してください:あなたは、クラスローダによってこれらの画像にアクセスします。

+0

私の編集をチェックしてください。 – MsCrelix

+0

* "jarファイルから画像を取得するための代替手段があります:..' getResource' "*これは、URLでリソースにアクセスする以外の方法があるように聞こえます。実際に私は1つの「代替」を考えることができますが、詳細にはあまりにも恐ろしいです。いいえ、 'getResource'(または' getResourceAsStream')は単にJarファイルからリソースを得る方法**です。それ以外は「代替」です。 –

+0

@MsCrelixリソースディレクトリの下にイメージがあることを確認してください。 –

関連する問題