Java: исключение NullPointerException из ClassLoader.getSystemResource - PullRequest
0 голосов
/ 13 апреля 2019

(я обещал, что искал помощи, но чувствую, что не уверен, что искать, поэтому спрашиваю) Я пытаюсь получить изображение, чтобы использовать значок для 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;
        }
    }

И как я бы использовал егов основном: updateActiveCheck(true);

На всякий случай, вот иерархия папок: https://imgur.com/a/mNixoOl Синяя стрелка - это то место, где я сейчас работаю, красные стрелки указывают на папку, которую я пытаюсьчтобы получить изображения из.Я попытался изменить URL-адрес папки, чтобы получить его правильно, но я чувствую, что, возможно, не справился.Я стараюсь не называть полный путь URL-адреса, так как мне нужно, чтобы эта папка и все ее содержимое были подключены к USB в какой-то момент, поэтому вызов «C: / users ..» не будет хорошей идеей

Я застрял: <</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, я работаю над пользовательским интерфейсом.Идея в том, что мне нужно было изменить значок / изображение этой переменной в зависимости от логического возврата updateActiveCheck (true / false).ActiveCheck определено как общедоступное.

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

У меня возникла проблема, из-за которой я не смог использовать getClass().getResource() для статических / нестатических ссылок, поэтому яб ClassLoader.getSystemResource().

...