getClass()。getResource()异常?

时间:2013-01-29 23:08:27

标签: java swing components imageicon getresource

我正在尝试学习如何将图像添加到我的JFrame中。我在GUI方面已经足够了,但我根本无法理解为什么这不起作用。

我设置了数组,以便我可以做多个图像,以防你想知道。

(1)我的问题是getClass()。getResource(“0.png”);由于某种原因,这一直在失败。当main(S ...)去创建对象GUIv1时,它在图像[0] ..... 0.png“)中失败;

不知道为什么,我正在使用eclipse,并且图像在我班级所在的默认包中。任何需要?

(2)这里似乎也有问题,但这不是第一个例外的原因,我也很感激这个问题的答案。

(如果错误,我会对代码字体道歉,这是我第一次来这里)。

import java.awt.*;
import javax.swing.*;

public class GUIv1 extends JFrame{

private static int tilesnum = 2;
private static ImageIcon[] image = new ImageIcon[tilesnum + 2];
private static JLabel[] imagepanel = new JLabel[tilesnum + 2];

public GUIv1() {
    setLayout(new FlowLayout());

    image[0] = new ImageIcon(getClass().getResource("0.png"));     //HERE (1)
    image[1] = new ImageIcon(getClass().getResource("1.png"));
    image[2] = new ImageIcon(getClass().getResource("2.png"));
    image[3] = new ImageIcon(getClass().getResource("3.png"));

    for(int i = 0; i < tilesnum + 2; i++) {
        imagepanel[i] = new JLabel(image[i]);
        add(image[i]);                                         //HERE (2)
    }

}

public static void main(String[] args) {

    GUIv1 selectorframe = new GUIv1();  
    selectorframe.setTitle("MapEditor v2");
    //JFrame mainframe = new JFrame("MapEditor v2");    
    selectorframe.pack();
    selectorframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    selectorframe.setVisible(true);
}   
}

1 个答案:

答案 0 :(得分:4)

使用getClass().getResource()时,您的图片必须与您的班级文件GUIv1.class位于同一位置,否则当NPE值传入时会产生null ImageIcon的构造函数。

如果您不确定类根在哪里(在这种情况下,图像应该位于何处),您可以显示以下结果:

System.out.println(getClass().getProtectionDomain().getCodeSource().getLocation());

在你的构造函数中。

其次,您无法直接向ImageIcon容器添加JFrame,因为它不是组件。您可以添加Jlabel,此组件:

add(imagepanel[i]);