javax.imageio.ImageIO - Невозможно загрузить значок в JFrame - PullRequest
1 голос
/ 13 ноября 2011

В следующем фрагменте кода я пытаюсь установить значок моего экземпляра JFrame, используя javax.imageio.ImageIO, и я получаю ниже исключения.Не могли бы вы сказать мне, что мне не хватает?

    import javax.imageio.ImageIO;
    ......
    BufferedImage image = null;
    try {
    //EXCEPTION IS thrown in the following line
        image = ImageIO.read(this.getClass().getResource("resources/Smartbook_icon.ico")); 
    } catch (IOException e) {
       ......
    }
    this.setIconImage(image);

ИСКЛЮЧЕНИЕ STACK TRACE

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException:  input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1362)
at se.websiter.bookingapp.UI.MainFrame.setGUIIcon(MainFrame.java:4131)
at se.websiter.bookingapp.UI.MainFrame.<init>(MainFrame.java:59)
at se.websiter.bookingapp.UI.MainFrame$60.run(MainFrame.java:4167)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Ответы [ 3 ]

2 голосов
/ 13 ноября 2011

Возможно, неверный путь к ресурсу.Я всегда использую следующий фрагмент кода для установки JFrame изображения значка, предполагая, что resources является подкаталогом пакета класса:

import java.net.URL;

// Setting window's icon
String resourcePathToIcon = String.format("/%s/resources/myicon.png",
        MyClass.class.getPackage().getName().replace('.', '/'));
URL windowIconURL = MyClass.class.getResource(resourcePathToIcon);
if (windowIconURL != null)
    setIconImage(new ImageIcon(windowIconURL).getImage());

Обратите внимание, что путь к изображению ресурса начинается с /.

1 голос
/ 13 ноября 2011

Убедитесь, что ваше изображение находится в папке ресурсов и используйте png вместо ico, затем вы можете загрузить его в ImageIcon и назначить его JFrame:

frame.setIconImage(new ImageIcon(MainWindow.class.getResource("/resources/someicon.png")).getImage());  
1 голос
/ 13 ноября 2011

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

...