You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java打地鼠类游戏运行时图片无法显示问题求助

打地鼠游戏图片无法显示的解决方法

问题描述

我正在用Java开发一款打地鼠类型的游戏,但运行程序时图片无法正常显示。我是编程新手,这应该是个容易解决的问题。

相关资源

  • 用到的图片:kuronomi.gif、kitty.gif
  • 运行效果:程序运行时按钮上无图片显示

代码

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class hellokitty {
    int screenWidth = 700;
    int screenHeight = 800;
    
    JFrame frame = new JFrame("Catch Hello Kitty!");
    JLabel textL = new JLabel();
    JPanel textP = new JPanel();
    JPanel boardP = new JPanel();
    
    JButton[] board = new JButton[9];
    ImageIcon kittyIcon;
    ImageIcon kuroIcon;
    
    JButton currentKittyTile;
    JButton currentKurTile;
    
    Random r = new Random();
    Timer setKittyTimer;
    Timer setKuroTimer;

    hellokitty(){
        //frame.setVisible(true);
        frame.setSize(screenWidth, screenHeight);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
    
        textL.setFont(new Font("Comic Sans MS", Font.PLAIN, 70));
        textL.setHorizontalAlignment(JLabel.CENTER);
        textL.setText("Score: 0");
        textL.setOpaque(true);
    
        textP.setLayout(new BorderLayout());
        textP.add(textL);
        frame.add(textP, BorderLayout.NORTH);
    
        boardP.setLayout(new GridLayout(3,3));
        boardP.setBackground(Color.pink);
        frame.add(boardP);
    
        Image KittyImg = new ImageIcon(getClass().getResource("./kitty.gif")).getImage();
        kittyIcon = new ImageIcon(KittyImg.getScaledInstance(150, 150, java.awt.Image.SCALE_SMOOTH));
    
        Image KuronomiImg = new ImageIcon(getClass().getResource("./kuronomi.gif")).getImage();
        kuroIcon = new ImageIcon(KuronomiImg.getScaledInstance(150, 150, java.awt.Image.SCALE_SMOOTH));

        for (int i = 0; i < 9; i ++){
            JButton tile = new JButton();
            board[i] = tile;
            boardP.add(tile);
           // tile.setIcon(kuroIcon);
            tile.setFocusable(false);
        }

        setKittyTimer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            if (currentKittyTile != null) {
                currentKittyTile.setIcon(null);
                currentKittyTile = null;
            }
        
            int num = r.nextInt(9); 
            JButton tile = board[num];
        
            currentKittyTile = tile;
            currentKittyTile.setIcon(kittyIcon);
            }
        });
    
        setKuroTimer = new Timer(1500, new ActionListener() {
            public void actionPerformed(ActionEvent e){
                if (currentKurTile != null){
                    currentKurTile.setIcon(null);
                    currentKurTile = null;
                }
        
                int num = r.nextInt(9);
                JButton tile = board[num];
        
                currentKurTile = tile;
                currentKurTile.setIcon(kuroIcon);
            }
        });
    
        setKittyTimer.start();
        setKuroTimer.start();
        frame.setVisible(true);
    }
}

解决方案

图片无法显示核心是资源路径错误,按以下步骤修复:

  • 调整资源路径与存放位置
    把两张gif图片放到和hellokitty.java同目录的src文件夹下,然后修改加载代码里的路径,去掉./:

    Image KittyImg = new ImageIcon(getClass().getResource("kitty.gif")).getImage();
    Image KuronomiImg = new ImageIcon(getClass().getResource("kuronomi.gif")).getImage();
    

    getResource默认从类所在的路径查找资源,加./反而会导致路径匹配失败。

  • 添加资源加载校验
    加个判断避免空指针,还能快速定位问题:

    URL kittyUrl = getClass().getResource("kitty.gif");
    if (kittyUrl == null) {
        System.err.println("找不到kitty.gif资源,请检查文件位置");
        return;
    }
    Image KittyImg = new ImageIcon(kittyUrl).getImage();
    

    对kuronomi.gif做同样的校验。

  • 确保IDE正确处理资源
    如果用IDEA/Eclipse,要保证图片文件会被复制到编译后的classes目录中。IDEA默认会自动复制非Java文件,Eclipse需要在项目属性的构建路径里把图片所在文件夹设为资源目录。

内容的提问来源于stack exchange,提问作者mar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:05:28