这是一个小程序。方法应将按钮上的图标设置为预定义的图标集。但是当我启动程序时,我得到一个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。现在它的工作。
由于
答案 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被抛出。请仔细检查,请追溯到应该初始化的位置,并且您可能会解决您的问题。