Почему мой код обработки значков вызывает исключение NullPointerException? - PullRequest
4 голосов
/ 07 января 2010

Я добавил изображение для своей кнопки, но при запуске этого кадра будет выдано это исключение. Почему? Пожалуйста, помогите мне.

init:

deps-jar:
compile-single:
run-single:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
        at ClientGUI.IdAndPasswordFrame.initComponents(IdAndPasswordFrame.java:91)
        at ClientGUI.IdAndPasswordFrame.<init>(IdAndPasswordFrame.java:22)
        at ClientGUI.IdAndPasswordFrame$4.run(IdAndPasswordFrame.java:200)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD SUCCESSFUL (total time: 1 second)

строка 138:

public ImageIcon (URL location) {
    this(location, location.toExternalForm());
}

line91:

 jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yahoo_1.gif"))); // NOI18N

Я использую эту плохую проверку (рекомендуется Питер Лэнг), которая: System.out.println (getClass (). GetResource ("/ Images / yahoo_1.gif")); и он возвращает ноль, почему? пожалуйста, помогите мне.

Ответы [ 6 ]

7 голосов
/ 07 января 2010

Это означает, что getClass().getResource("/Images/yahoo_1.gif") возвращает null.

JavaDoc утверждает, что это произойдет, если

ресурс не найден или у вызывающего нет необходимых прав для получения ресурса.

  1. Проверьте, действительно ли getResource возвращает null:
    System.out.println(getClass().getResource("/Images/yahoo_1.gif"));

  2. Убедитесь, что ваш путь правильный и он находится в вашем пути к классам.

EDIT

Я только что попробовал это с NetBeans. Я создал следующую структуру

Source Packages
  Images
    yahoo_1.gif

и ваш код работал нормально. Это ваша структура?

Попробуйте щелкнуть правой кнопкой мыши ваше приложение и выберите Clean and Build.

4 голосов
/ 12 ноября 2010

Чтобы исправить это, изображения должны быть скопированы в каталог bin , а не в каталог src .

В противном случае вы всегда будете иметь значение null для getClass (). GetResource ("image.png") . Путь не нулевой , и вы можете установить его, как указано выше - только если вы копируете нужные вам изображения в двоичную директорию, где находятся файлы .class для вашего проекта.

Это решило проблему. Дайте мне знать, если я помог в этом.

Иоан

1 голос
/ 24 мая 2016

У меня была такая же проблема.То, что сработало для меня, было:

  1. Посмотрите в файл jar или в папку bin (в папке с файлами .class) и посмотрите путь к изображению.*
1 голос
/ 07 января 2010

URL-адрес, который передается, является нулевым из этой строки:

getClass().getResource("/Images/yahoo_1.gif")

Из документации JDK:

[getResource (..) возвращает] объект URL для чтения ресурса, или ноль, если ресурс не может быть найден или вызывающий не имеет адекватные привилегии, чтобы получить Ресурс

Может быть, вы имели в виду ("Images / yahoo_1.gif") - т.е. относительный путь не абсолютный?

1 голос
/ 07 января 2010

Похоже, getClass().getResource("/Images/yahoo_1.gif") возвращает null, т.е. .gif не может быть найден на вашем пути к классам. (Изображения против изображений, может быть?)

0 голосов
/ 21 ноября 2016
private class HandlerClass implements ActionListener{
        public void actionperformed(ActionEvent event){
            JOptionPane.showMessageDialog(null, String.format("%s", event.getActionCommand()));
        }

}
...