Java 图像不';除非调整JFrame的大小,否则不会显示

Java 图像不';除非调整JFrame的大小,否则不会显示,java,image,swing,paintcomponent,drawimage,Java,Image,Swing,Paintcomponent,Drawimage,我一直在尝试使用JPanel在JFrame上显示图像,但只有在调整JFrame的大小时,图像才会显示 显示: package display; import javax.swing.JFrame; import img.*; public class Screen extends JFrame{ private static final long serialVersionUID = 1L; Spaceship s = new Spaceship(); publi

我一直在尝试使用JPanel在JFrame上显示图像,但只有在调整JFrame的大小时,图像才会显示

显示:

package display;

import javax.swing.JFrame;
import img.*;

public class Screen extends JFrame{

    private static final long serialVersionUID = 1L;

    Spaceship s = new Spaceship();
    public static void main(String[]args){
    new Screen();
    }

    public Screen(){
    setTitle("Spaceships!");
    setSize(700,605);
    setLocationRelativeTo(null);
    add(s);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

    }
}
宇宙飞船

package img;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JPanel;

public class Spaceship extends JPanel{

    private static final long serialVersionUID = 1L;

    Image spaceship = (Image)Toolkit.getDefaultToolkit().getImage(getClass().getResource("res/spaceship.png"));

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(spaceship,100,100,null);
    }
} 
我知道发生了什么,所以我得到的任何帮助都将受到感激

Toolkit.createImage()
异步加载图像。尝试指定图像观察者
JPanel
实现了
ImageObserver
,因此可以使用以下行:

g.drawImage(spaceship, 100, 100, this);
或者,您可以使用同步加载图像的
ImageIO.read

Toolkit.createImage()
异步加载图像。尝试指定图像观察者
JPanel
实现了
ImageObserver
,因此可以使用以下行:

g.drawImage(spaceship, 100, 100, this);
或者,您可以使用同步加载图像的
ImageIO.read

根据建议,他们建议在设置可见之前进行打包或设置大小。更改“添加”和“设置大小”的顺序如何

public Screen(){
    setTitle("Spaceships!");
    setLocationRelativeTo(null);
    add(s);
    setSize(700,605);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

}
根据建议,他们建议在设置可见之前进行打包或设置大小。更改“添加”和“设置大小”的顺序如何

public Screen(){
    setTitle("Spaceships!");
    setLocationRelativeTo(null);
    add(s);
    setSize(700,605);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

}