import javax.swing.ImageIcon;
import java.awt.Image;
import java.net.URL;
import javax.swing.JFrame;
public class ChangeTitleIconFrame extends JFrame {
public static void main(String[] args) {
ChangeTitleIconFrame frame = new ChangeTitleIconFrame();
}
public ChangeTitleIconFrame() {
super();
setTitle("改变窗体标题图标");
setBounds(100,100,280,160);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

URL url = ChangeTitleIconFrame.class.getResource("/image/icon.jpg");
ImageIcon imageIcon = new ImageIcon(url);//错误就在这里。不要这里的两句(和下一句),程序运行正常。
Image image = imageIcon.getImage();
setIconImage(image);
setVisible(true);
}
错误:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at ChangeTitleIconFrame.<init>(ChangeTitleIconFrame.java:16)
at ChangeTitleIconFrame.main(ChangeTitleIconFrame.java:7)}

解决方案 »

  1.   

    我认为是URL url = ChangeTitleIconFrame.class.getResource("/image/icon.jpg");
    出的错。
    URL 示例指示使用的协议为 http URL 可选择指定一个“端口”,但你的这个路径好像不是互联网的路径吧。
    也就是如果你用的是本地的图片,不应该用URL类。
      

  2.   

    我是按照书上的代码写的,其它的示例没有问题,就是只要涉及到图片的,都是这个问题,我是刚学的,不知道应该怎么改,那个图片路径我已经按书上说的,放在了项目Src下的image中了。
    那如果是要改的话,怎么改合适啊?请教了,谢谢!
      

  3.   

    那么就这样,照我说的做一次,你把图片放在根目录下(我这里是webroot)的class下。
    也就是放在class文件夹下。把image文件夹复制过去
      

  4.   

    setIconImage(new ImageIcon(ChangeTitleIconFrame.class.getResource("/image/icon.jpg")).getImage());注意你的图片所在的位置,我认为是你的图片放置的位置有问题,即图片应放置与src目录下,保证编译后的class的根目录与image文件夹同属同一父目录中,可通过判断你的imageIcon==null是否为true,如果为true,则是你的图片放置有问题,classloader未能成功加载图片文件
      

  5.   

    太谢谢你了,运行出来了。你说的对,把图片文件夹放在bin下面,和编译出来的.class文件放在一起。
      

  6.   

    更正一下,不是把图片文件夹和编译出来的.class文件放在一起,是把图片文件夹放在bin下才行。
      

  7.   

    你这是抛空指针异常,不是错误,产生异常的原因是用java.net的URL类,该类引用的资源是来自互联网上的资源,而你的路径下找不到资源于是就抛空指针异常了,你可以这样写:
    import javax.swing.ImageIcon;
    import java.awt.Image;
    import javax.swing.JFrame;public class ChangeTitleIconFrame extends JFrame {
    public static void main(String[] args) {
    ChangeTitleIconFrame frame = new ChangeTitleIconFrame();
    } public ChangeTitleIconFrame() {
    super();
    setTitle("改变窗体标题图标");
    setBounds(100, 100, 280, 160);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ImageIcon imageIcon = new ImageIcon("/image/icon.jpg");
    Image image = imageIcon.getImage();
    setIconImage(image);
    setVisible(true);
    }
    }
      

  8.   

    这种方法是不抛异常了,但是运行出来得不到想要的结果,也就是图标没有改变,还是以前那个。把图片文件夹放在bin下(如果有包时,也只能放在bin下,不能放在包中),用我以前的方法,能得到结果。
      

  9.   

    可以的,只要你把那个路径名弄好就可以了,比如我用的图片路径是:F:\图片\孙燕姿\燕姿1.jpg,那么我就应该写ImageIcon imageIcon = new ImageIcon("F:/图片/孙燕姿/燕姿1.jpg");同样的道理你也要把路径名敲对,你试试看!