これは、プログラマの間でよくある混乱です。getClass().getResource(path)
クラスパスからリソースをロードします。
ImageIcon image = new ImageIcon("peanut.jpg");
画像ファイルの名前のみを指定すると、Java は現在の作業ディレクトリでそれを探します。NetBeans を使用している場合、CWD はプロジェクト ディレクトリです。次の呼び出しを使用して、実行時に CWD を把握できます。
System.out.println(new File("").getAbsolutePath());
以下は、これを自分でテストできるコード例です。
package com.zetcode;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
class DrawingPanel extends JPanel {
private ImageIcon icon;
public DrawingPanel() {
loadImage();
int w = icon.getIconWidth();
int h = icon.getIconHeight();
setPreferredSize(new Dimension(w, h));
}
private void loadImage() {
icon = new ImageIcon("book.jpg");
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
icon.paintIcon(this, g, 0, 0);
}
}
public class ImageIconExample extends JFrame {
public ImageIconExample() {
initUI();
}
private void initUI() {
DrawingPanel dpnl = new DrawingPanel();
add(dpnl);
// System.out.println(new File("").getAbsolutePath());
pack();
setTitle("Image");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame ex = new ImageIconExample();
ex.setVisible(true);
}
});
}
}
次の図は、コンストラクターにイメージ名のみを提供する場合に、NetBeans で book.jpg イメージを配置する場所を示していますImageIcon
。

コマンドラインから同じプログラムがあります。ImageIconExample ディレクトリ内にいます。
$ pwd
/home/vronskij/prog/swing/ImageIconExample
$ツリー
.
├──本.jpg
└──コム
└──ゼットコード
├── DrawingPanel.class
├── ImageIconExample$1.class
├── ImageIconExample.class
└── ImageIconExample.java
2 ディレクトリ、5 ファイル
プログラムは次のコマンドで実行されます。
$ ~/bin/jdk1.7.0_45/bin/java com.zetcode.ImageIconExample
詳細については、Javaチュートリアルで画像を表示するを参照してください。