Java:ClassLoader.getSystemResource

时间:2019-04-13 19:35:17

标签: java nullpointerexception icons jlabel

(我答应过要寻求帮助,但是我不确定自己要寻找什么,所以我问) 我正在尝试检索图像以将图标用于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: ActiveCheckjLabel,我正在使用UI。我的想法是,我需要根据updateActiveCheck的布尔返回值(真/假)来更改此变量的图标/图像。 ActiveCheck现在定义为公开。

ActiveCheck = new javax.swing.JLabel(); ActiveCheck.setIcon(newjavax.swing.ImageIcon(getClass().getResource("/images/Start_NOTACTIVE.png"))); // NOI18N

我遇到一个问题,我无法使用getClass().getResource()进行静态/非静态引用,所以我使用了ClassLoader.getSystemResource()

0 个答案:

没有答案