You need to enable JavaScript to run this app. Java Swing开发躲避游戏运行仅显示空白屏幕该如何修复
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing开发躲避游戏运行仅显示空白屏幕该如何修复

问题修复方案

导致运行后空白的核心原因是你创建的Game面板实例没有添加到JFrame窗口中,Swing不会自动将自定义面板挂载到窗口,除此之外还有多处影响运行的问题,修复步骤如下:

1. 核心空白问题修复

在Game.java的main方法中,创建JFrame后添加一行代码,将面板挂载到窗口:

frame.add(game);

同时建议把frame.setVisible(true)放到所有窗口配置的最后,避免渲染异常。

2. 自定义绘制逻辑修正

Swing中自定义绘制应该重写paintComponent方法而非paint方法,修改Game类的绘制方法签名:

@Override
protected void paintComponent(Graphics g) {
    // 原有绘制逻辑保持不变
}

3. 文本显示问题修复

你当前lose默认值为true,但绘制"You Lose"的坐标是(0,0),Swing绘制文本时y坐标对应文字基线,这个位置会导致文字完全显示在窗口可视区域外,修改为:

// 调整到窗口居中位置
g2d.drawString("You Lose", 180, 250);

同时建议将boolean lose = true;改为boolean lose = false;,避免一进入游戏就显示失败提示。

4. Circle类移动逻辑修复

当前Circle的act方法存在两个问题:

  • 直接获取屏幕坐标而非相对于游戏面板的坐标,会导致移动位置偏移
  • 用坐标差比值计算移动量会出现除以0的异常,且移动轨迹错误
    修改为如下实现:
@Override
public void act() {
    // 获取鼠标位置并转换为相对于游戏面板的坐标
    Point mousePos = MouseInfo.getPointerInfo().getLocation();
    SwingUtilities.convertPointFromScreen(mousePos, this);
    double dx = mousePos.x - this.x;
    double dy = mousePos.y - this.y;
    double distance = Math.sqrt(dx * dx + dy * dy);
    // 避免和鼠标位置重合时除以0
    if (distance > 0) {
        this.x += (int) (speed * dx / distance);
        this.y += (int) (speed * dy / distance);
    }
}

5. 动画循环优化

直接在主线程用while循环+Thread.sleep会阻塞Swing的UI事件线程,建议改用Swing自带的Timer实现动画循环,修改main方法如下:

public static void main(String [] args) {
    // Swing UI操作必须在事件分发线程执行
    SwingUtilities.invokeLater(() -> {
        Game game = new Game();
        JFrame frame = new JFrame(game.appName);
        frame.add(game);
        frame.setSize(game.frameW, game.frameH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        // 启动动画定时器
        new Timer(game.frmConst, e -> {
            if (!game.lose) {
                // 后续可以在这里补充碰撞检测逻辑
                game.repaint();
            }
        }).start();
    });
}

完成以上修改后运行即可看到敌人和游戏界面正常显示。

内容的提问来源于stack exchange,提问作者iNoob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:48:03