Java Swing ImageIcon导致错误且不显示图像

Java Swing ImageIcon导致错误且不显示图像,java,swing,nullpointerexception,embedded-resource,imageicon,Java,Swing,Nullpointerexception,Embedded Resource,Imageicon,我的java项目有问题。我试图用背景图像制作JFrame,但是当我使用javax.swing.ImageIcon设置背景JLabel的图标时,当我运行程序时,控制台中会显示异常错误,并且图像不工作,只显示一个空白JFrame。这是我的密码: @SuppressWarnings("serial") public class MainUI extends JFrame { public static void main(String[] args) { new MainUI(

我的java项目有问题。我试图用背景图像制作JFrame,但是当我使用javax.swing.ImageIcon设置背景JLabel的图标时,当我运行程序时,控制台中会显示异常错误,并且图像不工作,只显示一个空白JFrame。这是我的密码:

@SuppressWarnings("serial")
public class MainUI extends JFrame {
    public static void main(String[] args) {
        new MainUI().build(); // Calls build method
    }
    private void build() {
        // Builds JFrame
        JFrame frame = new JFrame();
        JPanel base = new JPanel();
        JLabel background = new JLabel();
        frame.setVisible(true);
        frame.setTitle("Space Age");
        frame.setSize(640,480);
        frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        frame.setAutoRequestFocus(false);
        frame.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        frame.setLocationRelativeTo(null);
        base.setSize(640,480);
        base.setAlignmentX(0.0F);
        base.setAlignmentY(0.0F);
        base.setBackground(new java.awt.Color(255,255,255));
        background.setSize(640,480);
        background.setAlignmentX(0.0F);
        background.setAlignmentY(0.0F);
        background.setIcon(new ImageIcon(getClass().getResource("spaceage.images.starfield.png")));
        frame.add(base);
        frame.add(background);
    }
}
这是错误消息的外观:

Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at spaceage.src.MainUI.build(MainUI.java:36)
    at spaceage.src.MainUI.main(MainUI.java:15)
线程“main”java.lang.NullPointerException中的异常 位于javax.swing.ImageIcon。(未知源) 位于spaceage.src.MainUI.build(MainUI.java:36) 位于spaceage.src.MainUI.main(MainUI.java:15) 有人能告诉我我做错了什么,以及如何使图像正确显示吗? 提前感谢,,
圣地亚哥

我发现我做错了什么。这:

background.setIcon(new ImageIcon(getClass().getResource("spaceage.images.starfield.png")));
需要更改为:

background.setIcon(new ImageIcon(getClass().getResource("/spaceage/images/starfield.png")));

我得到了一个
NullPointerException
,因为我输入的图像路径不正确,所以
getResource()
找不到图像并返回了
null
,这也会对您有所帮助。你可以把它和你的需求联系起来。 你可以用这个-

ImageIcon iid = new ImageIcon("C:\\Users\\ranig\\My\\spaceinvaders\\ball.png");
注意:C:\Users\ranig\My\SpaceInvestors\ball.png是ball.png图像的整个路径

与此相反:

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));

很可能,您正在从不存在的路径加载图像;尝试
新建图像图标(getClass().getResource(“/spaceage/images/starfield.png”))
。请注意添加了“/”字符。另外,你看到的“.”实际上是子文件夹,我已经试过了;这与使用圆点相同。这个错误仍然发生在斜杠上,所以我认为它与图像的路径无关。是的,根据我的经验,为.jar文件加载图像比使用完整的文件路径要困难得多,而且几乎需要巫毒才能正常工作。在我的一个项目中,经过多次尝试,通过使用
images
包并调用
getClass().getResource(“/images/tileset.png”)
传递给
getResource
字符串应该有斜杠,如@Aarowaim的第一条注释所示。不要用圆点。它也区分大小写。所以
“/spaceage/images/starfield.png”!=“/spaceage/images/StarField.png”
“我认为这与图像的路径无关”再想想。当
ImageIcon
抛出NPE时,99.99%的时间路径是问题所在。事实上,我想不起有哪一个实例不是这样的,但我给了.01%的余地来解释JVM错误。我将路径设置为“/spaceage/images/starfield.png”,但它仍然不起作用。