SetIcon NullPointerException

时间:2014-06-30 18:33:58

标签: java swing nullpointerexception

这是一个小程序。方法应将按钮上的图标设置为预定义的图标集。但是当我启动程序时,我得到一个NullPointerException。

方法

public void SetIcon(boolean isActive) {
    ImageIcon IconBold, IconClipboard, IconKursiv, IconUnderline;
    Ressources Temp;
    if (isActive) {
        Temp = new RessourcesAlternate();
    } else {
        Temp = new RessourcesStandard();
    }
    IconBold = new ImageIcon(Temp.getBold());
    IconClipboard = new ImageIcon(Temp.getClipboard());
    IconKursiv = new ImageIcon(Temp.getKursiv());
    IconUnderline = new ImageIcon(Temp.getUnderline());

    this.btnBold.setText("");
    this.btnBold.setIcon(IconBold);

    this.btnClipboard.setText("");
    this.btnClipboard.setIcon(IconClipboard);

    this.btnKursiv.setText("");
    this.btnKursiv.setIcon(IconKursiv);

    this.btnUnderline.setText("");
    this.btnUnderline.setIcon(IconUnderline);
}

界面

public interface Ressources {
public URL getBold ();;
public URL getClipboard ();
public URL getUnderline ();
public URL getKursiv ();
}

班级标准

public final class RessourcesStandard implements Ressources{

final URL CLIPBOARD = Main.class.getResource("Icons/standard/clipboard-icon.png");

final URL BOLD = Main.class.getResource("Icons/standard/bold-icon.png");

final URL UNDERLINE = Main.class.getResource("Icons/standard/underline-icon.png");

final URL KURSIV = Main.class.getResource("Icons/standard/italic-icon.png");

@Override
public URL getBold() {
    return BOLD;
}

@Override
public URL getClipboard() {

    return CLIPBOARD;
}

@Override
public URL getUnderline() {
    return UNDERLINE;
}

@Override
public URL getKursiv() {
    return KURSIV;
}
}

Class Alternate

public final class RessourcesAlternate implements Ressources{

final URL CLIPBOARD = Main.class.getResource("Icons/alternate/clipboard-icon.png");

final URL BOLD = Main.class.getResource("Icons/alternate/bold-icon.png");

final URL UNDERLINE = Main.class.getResource("Icons/alternate/underline-icon.png");

final URL KURSIV = Main.class.getResource("Icons/alternate/italic-icon.png");

@Override
public URL getBold() {
    return BOLD;
}

@Override
public URL getClipboard() {

    return CLIPBOARD;
}

@Override
public URL getUnderline() {
    return UNDERLINE;
}

@Override
public URL getKursiv() {
    return KURSIV;
}

}

错误讯息:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at de.test.Editor.GUI_Tapped.SetIcon(GUI_Tapped.java:262)
at de.test.Editor.GUI.<init>(GUI.java:79)
at de.test.Editor.Main.main(Main.java:23)

GUI是我的主框架 GUI_Tapped可能是打开选项卡


好,

网址对象存在一些问题。他们回到了Null。 我编辑了整个Thing并使用字符串而不是URL。现在它的工作。

由于

1 个答案:

答案 0 :(得分:3)

如果您在JButtons上调用setIcon(...)的行上发生了NullPointerException,那么您的JButton可能为null。检查在抛出NPE的行上调用其方法的对象,然后您将看到。

更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念。您应仔细检查抛出它的行,找出哪个变量为null,然后追溯到您的代码以查看原因。你会一次又一次地碰到这些,相信我。

例如,堆栈跟踪有一个关键行:

Exception in thread "main" java.lang.NullPointerException
   at javax.swing.ImageIcon.<init>(Unknown Source)
   at de.test.Editor.GUI_Tapped.SetIcon(GUI_Tapped.java:262) // ***** here *****
   at de.test.Editor.GUI.<init>(GUI.java:79)
   at de.test.Editor.Main.main(Main.java:23)

这一行是stacktrace的第一行,它引用了你的类之一,因此可能的行导致NPE被抛出。请仔细检查,请追溯到应该初始化的位置,并且您可能会解决您的问题。