(我答应过要寻求帮助,但是我不确定自己要寻找什么,所以我问)
我正在尝试检索图像以将图标用于jLabel。这里的想法是我希望它在方法createImageIcon
(下面提供)返回true时更改图标。
我不断得到NPE
Exception in thread "main" java.lang.NullPointerException
每当我运行它。我尝试过“清理并构建”(我正在使用NetBeans)
初始变量:
protected static final ImageIcon ICON_ACTIVE = createImageIcon("images/Start_ACTIVE.png", "Card reader currently active.");
protected static final ImageIcon ICON_INACTIVE = createImageIcon("images/Start_NOTACTIVE.png", "Card reader currently active.");
createImageIcon
方法是:
public static ImageIcon createImageIcon(String path, String description) {
java.net.URL imgURL = ClassLoader.getSystemResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.out.println("Couldn't find file: " + path);
return null;
}
}
以及我将如何在main中使用它:updateActiveCheck(true);
以防万一,这是文件夹层次结构: https://imgur.com/a/mNixoOl 蓝色箭头是我当前的工作位置,红色箭头指向我要从中检索图像的文件夹。我尝试更改文件夹URL使其正确,但是我感觉可能做得不好。我试图避免调用整个URL路径,因为我需要将此文件夹及其所有内容一次性存储在USB上,因此调用“ C:/ users ..”并不是一个好主意< / p>
我被卡住了:<< / p>
编辑!:
堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException
at ams.UserInterface.updateActiveCheck(UserInterface.java:183)
at ams.UserInterface.main(UserInterface.java:160)
UserInterface.java:183
处的行:
ActiveCheck.setIcon(ICON_ACTIVE);
此方法的一部分:
public static void updateActiveCheck(boolean success) {
if(success) {
ActiveCheck.setIcon(ICON_ACTIVE);// = new ImageIcon("/images/Start_ACTIVE.png"););
}
else if(!success) {
ActiveCheck.setIcon(ICON_INACTIVE);
}
}
UserInterface.java:160
处的行
updateActiveCheck(true);
关于所包含的资源,当我imgURL
时,System.out.print
返回图像的实际路径。还有另一种方法来确保包括资源吗?
编辑2:
ActiveCheck
是jLabel
,我正在使用UI。我的想法是,我需要根据updateActiveCheck
的布尔返回值(真/假)来更改此变量的图标/图像。 ActiveCheck
现在定义为公开。
ActiveCheck = new javax.swing.JLabel();
ActiveCheck.setIcon(newjavax.swing.ImageIcon(getClass().getResource("/images/Start_NOTACTIVE.png"))); // NOI18N
我遇到一个问题,我无法使用getClass().getResource()
进行静态/非静态引用,所以我使用了ClassLoader.getSystemResource()
。