7

ImageIcon クラス オブジェクトを作成するときは、次のコードを使用します。

iconX = new ImageIcon (getClass().getResource("imageX.png"))

上記のコードは、.png がクラスの同じフォルダーにある場合、アプレットまたはデスクトップ アプリのいずれかで正しく機能します。

NullPointerException問題は、.Png が別のフォルダーにあるときに回避する方法です。ImageIconまたは、オブジェクトがクラスとは別の場所にある場合、オブジェクトに画像をどのようにロードしますか?

この方法がどのように機能するのかわかりません。誰かが私を助けてくれれば、感謝します。ありがとう!!

4

3 に答える 3

4

これを見てください -Class#getResource(java.lang.String)

上記のリンクをクリックしてドキュメントを読み、何が起こっているのかを理解するためにフォローしてください。

それは言う -

名前が「/」で始まる場合、リソースの絶対名は「/」に続く名前の部分です。

それ以外の場合、絶対名は次の形式になります。

     modified_package_name/name

modified_pa​​ckage_name は、 「.」を「/」に置き換えたこのオブジェクトのパッケージ名です。

したがって、このオブジェクト( を呼び出す場所getResource) がパッケージ内にあり/pkg1( /pkg1 がクラスパスのルートのすぐ下にあることを意味します)、「imageX.png」を使用したpkg1/imageX.png場合、画像が配置されている場所であるため、結果は正しいものになります。

ただし、リソース (imageX.png) を他のパッケージに移動し、/pkg2同じ方法でメソッドを呼び出した場合、結果はpkg1/imageX.png変わりませんが、リソースが実際には にあるため、今回は正しくありません/pkg2。それがNPEで終わるときです。

クラスパスのルートから始まるリソースのフル パスを明示的に指定することをお勧めします。(例: "/pkg/imageX.png")。

お役に立てれば。

于 2012-08-24T05:21:33.970 に答える
2

リソースへのパスを指定するだけです。

したがって、画像を Jar 内の「/resources/images」に配置する場合は、単純に次のように使用します。

iconX = new ImageIcon(getClass().getResource("/resources/images/imageX.png"))

基本的にあなたが言っているのは、クラスローダー、クラスパスで次のリソースを検索してください。

于 2012-08-24T05:04:35.643 に答える
1

画像が内部的なものである場合 (プロジェクトに相対的な場所が必要な場合、または jar にパッケージ化されている場合)、狂ったプログラマーが言ったことを実行します。

iconX = new ImageIcon(getClass().getResource("/path/imageX.png"))

パスは相対パスであるため、path/ はプロジェクトと同じフォルダー内のフォルダーになります (または jar にパッケージ化されます)。

外部画像が必要な場合は、ImageIcon コンストラクターにパス (例: "C:/.../file.png") を渡すだけです。ただし、リソースとして使用する方がよいため、これはお勧めしません。

ImageIcon コンストラクターの詳細については、こちらを参照してください。クラス リソースの読み込みの詳細については、こちら(Javadoc リンク)を参照してください。

于 2012-08-24T05:17:06.287 に答える