私の intellij は、ローカルの .png 画像を見つけることができません。
private String craft = "craft.png";
ImageIcon ii = new ImageIcon(this.getClass().getResource(craft));
.png は、Java ファイルと同じディレクトリにあります。なぜ機能しないのかわかりません。Mavenビルドを使用して、リソースからJavaに切り替えてみましたが、まだ運がありません:(
私の intellij は、ローカルの .png 画像を見つけることができません。
private String craft = "craft.png";
ImageIcon ii = new ImageIcon(this.getClass().getResource(craft));
.png は、Java ファイルと同じディレクトリにあります。なぜ機能しないのかわかりません。Mavenビルドを使用して、リソースからJavaに切り替えてみましたが、まだ運がありません:(
craft.png
src/main/resources
そうしないと、Maven ルールに従ってクラスパスにコピーされません。詳細については、この回答を参照してください。
コードも次のように変更する必要があります。
private String craft = "/craft.png";
サンプル作業プロジェクトは次のとおりです。
リソースからJavaに切り替えてみました
ということで、まずはcraft.pngを に入れてみましたsrc/main/resources
。これは、Maven に従って配置する必要がある場所です (src/main/java ではありません)。
しかし
、 this.class の packagethis.getClass().getResource("craft.png")
を基準にして "craft.png" を見つけようとするため、うまくいきませんでした。this.classがパッケージfoo.barにある場合は、 craft.pngを入れる必要がありますsrc/main/resources/foo/bar/
先頭にスラッシュを使用して、 getResource() で絶対パスを指定することもできます/
。たとえば、craft.png を resources の下のカスタム フォルダーに配置し、 customFolderの前にsrc/main/resources/customFolder/
先頭のスラッシュを付けて読み取ります。/
this.getClass().getResource("/customFolder/craft.png")
メソッドで先頭のスラッシュを使用しない場合getResource()
、内部的にクラスのパッケージ名がリソース名の前に追加されて絶対になります。この動作はClass.getResource()で説明されています