我正在尝试学习如何将图像添加到我的JFrame。我足够使用GUI,但是我根本无法理解为什么这行不通。
我设置了数组,以便我可以做多张图像,以防万一。
(1)我的问题是getClass()。getResource(“ 0.png”);由于某种原因,这一直失败。当main(S ...)创建对象GUIv1时,它在image [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);
}
}
最佳答案
使用getClass().getResource()
时,图像必须与类文件GUIv1.class
位于同一位置,否则将NPE
值传递到null
的构造函数中时将产生ImageIcon
。
如果不确定类根目录在哪里(在这种情况下,图像应该在哪里),则可以显示以下结果:
System.out.println(getClass().getProtectionDomain().getCodeSource().getLocation());
在您的构造函数中。
其次,您不能将
ImageIcon
直接添加到JFrame
容器中,因为它不是组件。您可以添加您的Jlabel
,这是一个组件:add(imagepanel[i]);
关于java - getClass()。getResource()异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14593766/