编译器提示‘无合适Window(int,int,String,Game)构造方法’错误的排查请求
解决"No Suitable Constructor Found for Window(int,int,String,Game)"错误
嘿,我一眼就揪出问题所在啦!你的代码逻辑本身没毛病,但类名和Java自带的系统类重名,把编译器给搞糊涂了。
问题根源
你在Game.java里导入了java.awt.*,这个包刚好包含Java自带的java.awt.Window类。当你在Game的构造方法里写new Window(...)时,编译器默认会优先匹配java.awt.Window,而非你自己写的com.tutorial.main.Window类。但java.awt.Window根本没有你需要的(int, int, String, Game)构造方法,自然就抛出了这个错误。
三种解决方案,任选其一即可:
1. 调用构造方法时指定完整包名
修改Game.java里的构造调用,明确告诉编译器要用你自己的Window类:
public Game(){ new com.tutorial.main.Window(WIDTH, HEIGHT, "Let's Build A Game!", this); }
2. 重命名你自己的Window类
把你的Window.java改名为GameWindow.java(或其他不冲突的名字),同时同步更新类定义和调用处:
- 文件名:
Window.java→GameWindow.java
public class GameWindow extends Canvas{ private static final long serialVersionUID = -3359827712233484029L; public GameWindow(int width, int height, String title, Game game){ // 原构造方法代码保持不变 JFrame frame = new JFrame(title); frame.setPreferredSize(new Dimension(width, height)); frame.setMaximumSize(new Dimension(width, height)); frame.setMinimumSize(new Dimension(width, height)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.setLocationRelativeTo(null); frame.add(game); frame.setVisible(true); game.start(); } }
Game.java里的调用修改为:
public Game(){ new GameWindow(WIDTH, HEIGHT, "Let's Build A Game!", this); }
3. 替换java.awt.*为具体需要的类
避免导入整个java.awt包,只导入你实际用到的类,这样就不会引入java.awt.Window了。修改Game.java的import部分:
// 删除 import java.awt.*; import java.awt.Canvas; import java.awt.Graphics; import java.awt.image.BufferStrategy;
验证修复
不管选哪种方案,重新编译运行后,编译器就能正确识别你自定义的Window类,这个构造方法错误就会消失啦。
内容的提问来源于stack exchange,提问作者fiendishbrokeboi
相关产品推荐
相关产品推荐

