You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Java开发屏幕保护程序时浮动图像闪烁不动的问题

问题核心原因

你没有禁用JFrame的默认布局管理器,Swing的JFrame默认使用BorderLayout,你调用add(logo)时组件默认被添加到BorderLayout.CENTER区域,布局管理器会强制将组件固定在居中位置。你在update方法中手动调用setLocation修改位置后,布局管理器下一次重绘时会立刻将组件拉回居中位置,就表现为图形在中间闪烁、无法移动的现象。

修复步骤

  • 第一步:在Protect类的构造方法中添加代码禁用默认布局,手动控制组件位置:
setLayout(null);

你可以把这行代码放在getContentPane().setBackground(PhoenixColors.BLACK);之后即可。

  • 第二步:给logo设置初始位置(可选,优化体验),你当前的xLoc、yLoc默认初始值为0.0也可以运行,若要实现随机初始浮动位置,可以在timer.start();之前添加如下代码:
// 等待窗口渲染完成获取正确宽高后设置初始位置
addNotify();
xLoc = Math.random() * (getWidth() - logo.getWidth());
yLoc = Math.random() * (getHeight() - logo.getHeight());
logo.setLocation((int)xLoc, (int)yLoc);
  • 第三步:优化重绘逻辑(可选,减少闪烁),将update方法中的repaint();替换为logo.repaint();,只重绘logo区域不需要重绘整个窗口,进一步降低闪烁概率。

额外可选优化

建议在构造方法中添加默认关闭操作配置,避免窗口关闭后Java进程残留:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:09