java - JFrame 的默认图标在动态更新期间在 Win 任务栏中间歇性显示
问题描述
我正在动态更新 a 的图标,JFrame
但在任务栏中,默认图标(一杯咖啡)每隔几秒钟显示一次,有什么方法可以禁用它吗?
首先我设置了一个默认的自定义图标:
frame.setIconImage
然后每 100 毫秒更新一次图标。在 Win 7/8/10(oracle jdk 8 和 10)中测试 - 相同的行为。
这是为了让我的音频播放器可视化音频波。
有什么办法解决吗?
示例代码:
package test;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.swing.JFrame;
public class TestFrameIcon {
static BufferedImage img = new BufferedImage(64, 64, BufferedImage.TYPE_4BYTE_ABGR);
static Random r = new Random();
private static BufferedImage getIcon() {
Graphics g = img.getGraphics();
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
g.fillRect(0, 0, img.getWidth(), img.getHeight());
g.dispose();
return img;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setIconImage(getIcon());
f.setSize(100, 100);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Thread(() -> {
while (true) {
f.setIconImage(getIcon());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}).start();;
f.setVisible(true);
}
}
每隔几秒钟,它会在任务栏中显示一个默认图标:
解决方案
我可以重现这个问题。
当我确保像这样在 Event-Dispatch-Thread 中执行图标更改时(对于 Java 8 及更高版本),我消失了。
代替
f.setIconImage(getIcon());
和
SwingUtilities.invokeLater(() -> f.setIconImage(getIcon()));
推荐阅读
- linux - 可以使用陷阱命令检测
- reactjs - 如何在 React 中为 html 标签编写内联样式?
- php - 从一个数据库表中选择一些数据并插入到同一数据库中的另一个表中
- php - 我在将文件移动到所需文件夹时遇到问题
- vue.js - Vue SPA - PhantomJS 工作成功,但 Fetch As Google 显示空白
- angular - 带有 Windows 身份验证的 ASP.NET Core 应用程序提供错误的用户身份
- javascript - 如何在osx上使用键盘触发vscode智能感知?
- laravel - Laravel 使用动态发件人发送电子邮件
- sql - 如何只使用一次 EXECUTE IMMEDIATE 创建 2 个表?
- python - 在while循环中执行时是否可以修复len(df)?