You need to enable JavaScript to run this app. Eclipse运行错误Java文件,新编写的Swing绘制彩色圆代码无法启动
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse运行错误Java文件,新编写的Swing绘制彩色圆代码无法启动

代码问题修复

你的现有代码存在几个逻辑错误,会导致功能无法正常运行,先修改以下问题:

  1. paintComponent方法内存在死循环:while(a != -1)的循环变量a没有做自增,永远不会退出循环,后续的绘制代码永远不会执行
  2. 鼠标点击事件中没有对count做自增,点击后数组插入了坐标但计数不变,绘制逻辑不会执行
  3. main方法必须是static修饰的,否则无法作为Java程序入口被JVM识别
  4. 绘制循环条件错误:i < count - 1会漏掉最新点击的坐标,应该改成i < count
  5. 绘制前没有调用父类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 15:15:03