import java.awt.*;
import java.net.*;
import javax.swing.*;public class MyImageIcon extends JFrame {
public MyImageIcon() {
Container container = getContentPane();
// 创建一个标签
JLabel jl = new JLabel("这是一个JFrame窗体", JLabel.CENTER);
// 获取图片所在的URL
URL url = MyImageIcon.class.getResource("imageButton.jpg");
Icon icon = new ImageIcon(url); // 实例化Icon对象
jl.setIcon(icon); // 为标签设置图片
// 设置文字放置在标签中间
jl.setHorizontalAlignment(SwingConstants.CENTER);
jl.setOpaque(true); // 设置标签为不透明状态
container.add(jl); // 将标签添加到容器中
setSize(250, 100); // 设置窗体大小
setVisible(true); // 使窗体可见
// 设置窗体关闭模式
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

public static void main(String args[]) {
new MyImageIcon(); // 实例化MyImageIcon对象
}
}
图片“imageButton.jpg”我已经放在sd文件夹下了,还是报出异常:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:187)
at sd.MyImageIcon.<init>(MyImageIcon.java:14)
at sd.MyImageIcon.main(MyImageIcon.java:27)
这是怎么回事呢

解决方案 »

  1.   

    imageButton.jpg不存在。
    需要放到和MyImageIcon.class一个目录
      

  2.   

    使用断点,设置好断点后,Debug一下,跟踪数据,试一下吧!
      

  3.   

    URL url = MyImageIcon.class.getResource("imageButton.jpg");
    这里使用的是相对路径,就是说图片应该和MyImageIcon类放到同一目录下。
      

  4.   

    public MyImageIcon() {
    Container container = getContentPane();
    // 创建一个标签
    JLabel jl = new JLabel("这是一个JFrame窗体", JLabel.CENTER);
    // 获取图片所在的URL
            Icon icon = new ImageIcon("F:\\Eclipse workspace\\swing\\bin\\sd\\imageButton.jpg"); // 实例化Icon对象
    jl.setIcon(icon); // 为标签设置图片
    // 设置文字放置在标签中间
    jl.setHorizontalAlignment(SwingConstants.CENTER);
    jl.setOpaque(true); // 设置标签为不透明状态
    container.add(jl); // 将标签添加到容器中
    setSize(250, 100); // 设置窗体大小
    setVisible(true); // 使窗体可见
    // 设置窗体关闭模式
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    谢谢各位的热心,我刚刚把那个图片移了n个位置也没运行成功,不过代码中改一下就出来了,呵呵,我也莫名其妙Icon icon = new ImageIcon("F:\\Eclipse workspace\\swing\\bin\\sd\\imageButton.jpg"); // 实例化Icon对象
      

  5.   

    2楼和4楼说得非常对,我开始放错地方了,应该放在bin目录下的包中,我放到src中去了,可惜后来移过去又没有刷新,所以运行还出错,刷新一下果然行了,哈哈