你有一个非常令人困惑的程序结构让你自己变得困难,我建议你简化很多事情.
首先,您当前的MinesweeperMenu类不需要扩展MinesweeperPanel,后者类也不需要扩展JFrame.然后你在其他地方有一个静态JFrame – 这是太多的JFrame,并且要启动,你试图在一个JFrame中显示你的图像,但是显示另一个没有图片的那个.你的程序只需要一个JFrame,它应该可以创建,填充其内容,打包并显示在一个地方,而不是像你一样在这里散落.
你试图在paintComponent覆盖中显示图片,但是这个方法永远不会被调用,因为你的类扩展了JFrame(最终)并且JFrame没有这个方法.你正在使用正确的方法,但是类应该扩展JPanel,你应该在paintComponent方法块上面有一个@Override注释,以确保你实际上覆盖了父方法.
你应该摆脱这个程序中所有静态的东西.这里唯一静态的应该是main方法,也许是一些常量,但就是这样.
这里有更多的错误,我没有多少时间来讨论所有这些错误.考虑从头开始,从小开始,使小位工作,然后将它们加在一起.
例如,首先创建一个非常小的程序,尝试将图像读入Image对象,将其放在ImageIcon中,将ImageIcon放入JLabel,并在JOptionPane中显示JLabel,这很简单,只是为了看看你是否可以读取图像确定,例如,这样的事情:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class TestImages {