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
相关产品推荐
相关产品推荐

