2012-04-15 2 views
0

Сначала я использовал JLabel и ImageIcon. Он работал нормально. Однако изображение не отображается, когда я экспортировал его в JAR.
Итак, я создал свой собственный ImagePanel и использовал метод drawImage для его отображения. Но она заканчивается, и бросает исключениеДобавить изображения в myPanel с помощью ImageIO.read

в теме «главный» java.lang.IllegalArgumentException: вход == нуля!

, мой код следует ниже ..

STARTMENU

public class startMenu extends JFrame{ 
    ... 
    URL imgUrl = getClass().getResource("images/contacts.png"); 

    public startMenu(){ 
    ... 
    ImagePanel imgPanel = new ImagePanel(imgUrl); 
    } 

} 

ImagePanel

public class ImagePanel extends JPanel{ 

    private Image image; 
    private URL imgUrl; 

public ImagePanel(URL url){ 
     this.imgUrl= url; 

     try{  
      image = ImageIO.read(imgUrl); 
     } 
     catch (IOException e) { 
      System.out.println("no such file"); 
     } 
    } 

@Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if(image!=null){ 
      g.drawImage(image, 10, 12, 128, 128, this); 
     } 
     else{ 
      g.drawImage(image, 0, 0, this); 
     } 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(150,150); 
    } 
} 

Если я хотел бы использовать ImageIcon с ImageUrl. Он показывает то же сообщение об ошибке.

URL imgUrl = getClass().getResource("images/contacts.png"); 
    private ImageIcon adBook = new ImageIcon(imgUrl); 
    private JLabel mainImg = new JLabel(adBook); 
+0

Вы уверены, что ваше изображение находится в вашем банке в директории с именем ' "изображения"'? (так как вы загружаете его с помощью getClass(). getResource ("images/contacts.png"); ') – ulmangt

+0

' "images/contacts.png" 'Поместите ведущий'/', например. '" /images/contacts.png "' –

+2

* "Сначала я использовал JLabel и ImageIcon. Он работал нормально. Однако изображение не отображается, когда я экспортировал его в JAR." * Это должно быть потому, что вы поставляли 'String' в конструктор. Существует также конструктор для 'URL'. Затем проблема заключается в определении местоположения изображения, что является одним и тем же для любого способа его выполнения. Вернитесь к использованию 'JLabel' для отображения изображения. –

ответ

0

проблема заключается в том, где находятся изображения. Я всегда сохранял изображения непосредственно в каталоге, где находятся «src» и «bin». ", но getClass(). getResource (" ... ")" возвращает путь к bin. Поэтому мне просто пришлось переместить папку изображений в «src», поэтому она автоматически сделает копию этого каталога в «bin». задача решена.

URL imgUrl = getClass().getResource("images/contacts.png"); 

возвращается ->Q:\workspace\project name\bin\images\contacts.png