Eclipse Oxygen中Java 2D绘图代码无输出问题求助
解决你的2D绘图程序无输出问题
我来帮你排查下这个在Eclipse Oxygen中开发的2D绘图程序的问题,你遇到的“运行后无任何输出、程序无进展”主要是几个关键细节没处理好,下面是问题分析和修正后的代码:
问题点分析
- 窗口未显示:main方法中仅创建了Frame实例并设置了标题、大小,但没有调用
setVisible(true)让窗口显示出来,这是导致你看不到任何内容的核心原因。 - paint方法参数错误:AWT组件的
paint方法默认接收Graphics类型参数,你定义的参数是Graphics2D,这会导致AWT的绘制机制无法正确调用这个方法。 - 背景设置位置错误:在
paint方法内调用setBackground会触发组件重绘,造成无限循环的绘制调用,应该把背景设置放在初始化代码中。 - 冗余绘图代码:你绘制了两个完全相同的
Rectangle2D,后面的黑色填充会完全覆盖前面的蓝色填充,属于无效冗余代码。 - 缺少窗口关闭处理:当前程序点击关闭按钮无法退出,需要添加窗口关闭的事件监听。
修正后的代码
import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.Arc2D; import java.awt.geom.Rectangle2D; public class HOUSE1 extends Frame { public HOUSE1() { // 在构造函数中设置背景色 setBackground(Color.white); // 添加窗口关闭事件处理 addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } @Override public void paint(Graphics g) { // 将Graphics转换为Graphics2D Graphics2D g2d = (Graphics2D) g; g2d.drawString("HOME SWEET HOME", 80, 60); // 绘制并填充扇形(屋顶) Arc2D arc1 = new Arc2D.Double(250, 50, 500, 300, 225, 90, Arc2D.PIE); g2d.setColor(Color.red); g2d.fill(arc1); g2d.draw(arc1); // 绘制并填充矩形(房屋主体) Rectangle2D rect = new Rectangle2D.Double(325, 300, 350, 300); g2d.setColor(Color.blue); g2d.fill(rect); g2d.draw(rect); } public static void main(String[] args) { HOUSE1 f = new HOUSE1(); f.setTitle("HOUSE"); // 调整窗口大小,让内容能完整显示(原大小300x100太小,看不到图形) f.setSize(800, 700); // 关键:让窗口显示出来 f.setVisible(true); } }
关键修正说明
- 给
HOUSE1添加了构造函数,在其中设置背景色和窗口关闭事件,避免在paint方法中触发重绘循环。 - 修正了
paint方法的参数类型为Graphics,再转换为Graphics2D,确保AWT能正确调用该方法。 - 在main方法中添加了
f.setVisible(true),这是让窗口显示的核心步骤。 - 调整了窗口大小(原300x100太小,无法容纳你绘制的图形),确保所有内容都能显示出来。
- 移除了冗余的重复矩形绘制代码,优化了绘图逻辑。
内容的提问来源于stack exchange,提问作者MAMIA
相关产品推荐
相关产品推荐

