-
Notifications
You must be signed in to change notification settings - Fork 62
Open
Description
HI,你好
在windows11下,当我使用dorkbox.SystemTray4.4时,点击系统托盘图标,无法正常弹出系统托盘菜单。
我是在windows11下
java version "23.0.2" 2025-01-21
Java(TM) SE Runtime Environment (build 23.0.2+7-58)
Java HotSpot(TM) 64-Bit Server VM (build 23.0.2+7-58, mixed mode, sharing)
同样的代码,当我切换到dorkbox.SystemTray4.1时,就可以正常弹出显示托盘菜单。
以下是我的测试代码类。
package BibleLight.TR;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import dorkbox.systemTray.Menu;
import dorkbox.systemTray.MenuItem;
import dorkbox.systemTray.SystemTray;
/**
* 简化版系统托盘测试类
*/
public class SimpleTrayTest {
public static void main(String[] args) {
System.out.println("=== 简化版系统托盘测试 ===");
try {
// 配置 SystemTray 参数
SystemTray.DEBUG = true;
SystemTray.AUTO_SIZE = true;
// 获取系统托盘实例
SystemTray systemTray = SystemTray.get();
if (systemTray == null) {
System.err.println("无法获取系统托盘实例!");
return;
}
System.out.println("成功获取系统托盘,类型: " + systemTray.getType());
// 设置图标
systemTray.setImage(createSimpleIcon());
systemTray.setTooltip("测试托盘");
systemTray.setStatus("测试中");
// 获取菜单
Menu menu = systemTray.getMenu();
if (menu == null) {
System.err.println("无法获取菜单!");
return;
}
// 添加菜单项
MenuItem testItem = new MenuItem("测试菜单项", e -> {
System.out.println("测试菜单项被点击");
});
menu.add(testItem);
// 添加退出菜单项
MenuItem exitItem = new MenuItem("退出", e -> {
System.out.println("退出程序");
systemTray.shutdown();
System.exit(0);
});
menu.add(exitItem);
System.out.println("菜单创建完成,请点击系统托盘图标测试");
System.out.println("程序将运行30秒...");
// 保持程序运行
Thread.sleep(30000);
// 清理资源
systemTray.shutdown();
} catch (Exception e) {
System.err.println("测试过程中发生错误: " + e.getMessage());
e.printStackTrace();
}
}
/**
* 创建一个简单的彩色图标
*/
private static BufferedImage createSimpleIcon() {
int size = 16;
BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
// 设置抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 绘制蓝色圆形背景
g2d.setColor(Color.BLUE);
g2d.fillOval(0, 0, size, size);
// 绘制白色文字"T"
g2d.setColor(Color.WHITE);
g2d.setFont(new Font("Arial", Font.BOLD, 12));
FontMetrics fm = g2d.getFontMetrics();
int x = (size - fm.stringWidth("T")) / 2;
int y = (size - fm.getHeight()) / 2 + fm.getAscent();
g2d.drawString("T", x, y);
g2d.dispose();
return image;
}
}
运行后控制台信息如下:
=== 简化版系统托盘测试 ===
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
成功获取系统托盘,类型: WindowsNative
菜单创建完成,请点击系统托盘图标测试
程序将运行30秒...
dorkbox.SystemTray4.4版在manjaro和Ubuntu下都能正常显示使用。
谁能帮我解释下问题出在了哪里?
Metadata
Metadata
Assignees
Labels
No labels