Eclipse运行错误Java文件,新编写的Swing绘制彩色圆代码无法启动
代码问题修复
你的现有代码存在几个逻辑错误,会导致功能无法正常运行,先修改以下问题:
paintComponent方法内存在死循环:while(a != -1)的循环变量a没有做自增,永远不会退出循环,后续的绘制代码永远不会执行- 鼠标点击事件中没有对
count做自增,点击后数组插入了坐标但计数不变,绘制逻辑不会执行 - main方法必须是
static修饰的,否则无法作为Java程序入口被JVM识别 - 绘制循环条件错误:
i < count - 1会漏掉最新点击的坐标,应该改成i < count - 绘制前没有调用父类
paintComponent方法,会导致面板残留绘制痕迹或显示异常
修复后的完整代码如下:
import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class DrawingHoles extends JFrame{ private class MyPanel extends JPanel{ private Point[] points; private int count = 0; public MyPanel() { points = new Point[100]; this.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if(count < points.length) { // 避免数组越界 points[count] = new Point(e.getX(),e.getY()); count++; // 计数自增 repaint(); } } }); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // 调用父类方法清屏 for(int i = 0; i < count;i++) { // 按顺序设置三色,不需要额外循环 if(i%3 == 0) g.setColor(Color.RED); else if(i%3 == 1) g.setColor(Color.GREEN); else if (i%3 == 2) g.setColor(Color.BLUE); g.fillOval(points[i].x, points[i].y, 50, 50); } } } public DrawingHoles() { setSize(400,300); setTitle("drawing circles with your mouse"); setDefaultCloseOperation(EXIT_ON_CLOSE); add(new MyPanel()); } // main方法必须加static修饰 public static void main(String[] args) { new DrawingHoles().setVisible(true); } }
Eclipse运行旧代码排查方案
按以下步骤逐一排查即可解决:
- 清理项目缓存:点击顶部菜单栏「Project」→ 选择「Clean...」→ 选中当前项目确认,等待编译完成后再运行
- 修正运行入口:右键
DrawingHoles.java文件 → 选择「Run As」→ 「Java Application」,不要直接点击顶部运行按钮,避免默认关联之前的旧类 - 开启自动编译:点击「Project」→ 确认「Build Automatically」已勾选,未勾选的话修改代码后不会自动生成新的编译文件
- 检查编译报错:查看底部「Problems」面板,如果存在编译错误,Eclipse不会生成新的class文件,会默认运行最后一次编译成功的旧代码,先修复所有报错再运行
- 手动删除旧编译文件:打开项目在工作空间的存储目录,删除
bin文件夹下的所有class文件,再重新编译运行
内容的提问来源于stack exchange,提问作者Han
相关产品推荐
相关产品推荐

