图像不显示在JFrame上

时间:2017-06-02 18:22:58

标签: java

我用Java编写游戏已经有一段时间了,我陷入了图像处理的困境。我不知道为什么,但它在我之前的所有游戏中都有效。我说得对吗?谢谢你的建议!

public class Game extends JPanel implements ActionListener {
    private static final long serialVersionUID = 1L;

    private Timer gameLoop;
    public static final int WIDTH = 800;
    public static final int HEIGHT = 500;
    public static final Dimension SCREEN_SIZE = new Dimension(WIDTH, HEIGHT);
    public static final int FRAMERATE = 60;
    public static final String TITLE = "MedievalGame";

    public BufferedImage[] images = new BufferedImage[4];

    public int x = 100;
    public int y = 100;
    public int width = 100;
    public int height = 100;

    public Game() {
        this.setPreferredSize(SCREEN_SIZE);
        this.setFocusable(true);

        try {
            images[0] = ImageIO.read(getClass().getResourceAsStream("path"));
        } catch (IOException e) {
            e.printStackTrace()
        }

        gameLoop = new Timer(1000 / FRAMERATE, this);
        gameLoop.start();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(images[0], x, y, width, height, null);
    }

    public void actionPerformed(ActionEvent e) {
        this.repaint();
    }

    public static void main(String[] args) {
        JFrame window = new JFrame(TITLE);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setResizable(false);
        window.add(new Game());
        window.pack();
        window.setLocationRelativeTo(null);
        window.setVisible(true);
    }
}

我查了很多类似的问题,但没有一个能解决我的问题。

3 个答案:

答案 0 :(得分:1)

您的代码适用于我:

enter image description here

我所做的只是将图像添加到.java文件的同一个包中,我没有使用IDE,但你可能正在这样做,所以你可以管理包......

我更确定这是一个路径问题,而不是代码问题,但是一旦您使用JAR文件导出它们,您的图像将成为嵌入式资源,因此明智地将它们视为已经存在并加载它们如图所示here

同时阅读:Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(普遍共识是肯定并覆盖getPreferredSize()方法)......

答案 1 :(得分:0)

我在这里运行您的代码并正常运行

检查您正在加载的图片是否为空,因此enemyImages [0]无效

请确保您没有调用现有的JFrame方法" paintComponents",因此将方法paintComponent的名称更改为其他名称,然后再次运行

拥抱

答案 2 :(得分:0)

我弄清楚问题是什么。关于代码的一切都是正确的,但图像不知何故被破坏了。我尝试使用其他图像,它的工作原理。谢谢大家的时间和帮助。