2011-08-15 12 views
1

これは私をナットにしている! 連結とフォーマットの両方を使用し、生成された文字列が正しいパスと一致している間に、ループはgetから例外をスローします。ここで例外が見つからないのはなぜですか?

何が起こっているのですか?

ImageIcon thisWorks= new ImageIcon(testview.class.getResource("/led_images/"+1+"_off.png")); 
    for(int i = 1; i <= 10; i++) 
    { 
     String on = String.format("/led_images/%d_on.png",i); 
     String off = String.format("/led_images/%d_off.png",i); 


    ledIcons.put(i+"_off", new ImageIcon(testview.class.getResource(off))); 
    ledIcons.put(i+"_on", new ImageIcon(testview.class.getResource(on))); 
    } 

編集: 私はマップを間違って使用していますか? Map<String,ImageIcon>です。

Edit2: ええ、私はマップを間違って使用していると思います。

私は、それはこのように宣言している:

public Map< String, ImageIcon> ledIcons; 

それはループ内でNULL値です。 だから私はそれがC + +のようではないと思いますか?

Edit3: ええ、この質問を無視して、私はフィールドを適切に初期化しませんでした。

+1

それが例外をスローしない場合ので、あなたはのtry catchブロックで囲みましたか?このコードを1行ずつデバッグしましたか? –

答えて

2

は、フィールドを初期化します。

public Map< String, ImageIcon> ledIcons = new HashMap< String, ImageIcon>(); 
+0

実際それを修正しました。他の言語の習慣を気にしない。 – Erius

+0

+1 - ニースキャッチ。 – duffymo

2

私は、スラッシュが問題であると推測しています。おそらく相対パスが必要です。ドキュメントを参照してください。

http://download.oracle.com/javase/6/docs/api/java/lang/Class.html#getResource(java.lang.String

+0

しかし、それは 'thisWorks'の行でうまくいくようですね。 – aioobe

+0

文字列を印刷します。私はパスが無効であると確信しています。例外をキャッチし、スタックトレースを出力します。 – duffymo

3

thisWorks作品ならば、明らかに"/led_images/1_off.png"存在します。ループ内の画像に例外が発生した場合は、おそらく

/led_images/2_off.png 
/led_images/2_off.png 
/led_images/3_off.png 
... 
/led_images/10_off.png 

/led_images/1_on.png 
/led_images/2_on.png 
/led_images/3_on.png 
... 
/led_images/10_on.png 

のいずれかが欠落しています。

編集:私はマップを間違って使用していますか?それは地図です。

いいえ、それは私にはうまく見えます。 (。あなたが後で検索に問題がない限り)

関連する問題