Domanda

I am having a problem with my java project. I am trying to make a JFrame with a background image, but when I use javax.swing.ImageIcon to set the icon of the background JLabel it shows an exception error in the console when I run the program and the image doesn't work, only showing a blank JFrame. Here is my code:

@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);
    }
}

This is what the error message looks like:

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)

Can someone tell me what I did wrong and how to to make the image display properly? Thanks in advance, Santiago

È stato utile?

Soluzione

I figured out what I did wrong. This:

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

needed to be changed to this:

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

I got a NullPointerException because I entered the path to my image incorrectly, so getResource() couldn't find the image and returned null.

Altri suggerimenti

Also this will help you. You can link it with your requirement. you can use this-

ImageIcon iid = new ImageIcon("C:\\Users\\ranig\\My\\spaceinvaders\\ball.png");

Note: C:\Users\ranig\My\spaceinvaders\ball.png is the whole path of ball.png image.

instead of this:

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top