shutdown 命令)public class SystemTrayToolbox {
private static final Runtime RT = Runtime.getRuntime();
private static final Map<String, String> COMMANDS = new LinkedHashMap<>(); // 保持菜單順序
static {
COMMANDS.put("計算器", "calc");
COMMANDS.put("記事本", "notepad");
COMMANDS.put("任務管理器", "taskmgr");
COMMANDS.put("畫圖工具", "mspaint");
COMMANDS.put("打開 QQ", "\"C:\\Program Files (x86)\\Tencent\\QQ\\QQ.exe\"");
COMMANDS.put("打開工作日誌", "cmd /c start d:\\worklog.txt");
COMMANDS.put("10分鐘後關機", "shutdown -s -t 600");
COMMANDS.put("取消關機", "shutdown -a");
}
public static void main(String[] args) throws Exception {
if (!SystemTray.isSupported()) {
System.err.println("當前平台不支持系統托盤");
return;
}
SystemTray tray = SystemTray.getSystemTray();
PopupMenu menu = new PopupMenu();
// 動態構建菜單項
COMMANDS.forEach((label, cmd) -> {
MenuItem item = new MenuItem(label);
item.addActionListener(e -> {
try {
RT.exec(cmd);
} catch (IOException ex) {
ex.printStackTrace();
// 可彈出 TrayIcon 提示失敗
}
});
menu.add(item);
});
// 退出項
MenuItem exitItem = new MenuItem("退出程序");
exitItem.addActionListener(e -> System.exit(0));
menu.add(exitItem);
// 托盤圖標 (請替換為實際圖片路徑)
Image icon = Toolkit.getDefaultToolkit().getImage("tray-icon.png");
TrayIcon trayIcon = new TrayIcon(icon, "工具箱", menu);
trayIcon.setImageAutoSize(true);
tray.add(trayIcon);
}
}
| 類/接口 | 作用 |
|---|---|
SystemTray | 系統托盤單例,isSupported() 需先檢查 |
TrayIcon | 托盤圖標承載體,支持圖片、提示文本、右鍵菜單 |
PopupMenu + MenuItem | AWT 原生彈出菜單組件 |
Runtime.exec() | 執行系統命令,Windows 需注意路徑空格加引號 |
getClass().getResource() 讀取-Dfile.encoding=UTF-8LinkedHashMap 或維護 List<MenuItem>Menu 實現分類(如「系統工具」、「網絡工具」)maven-shade-plugin 打 Fat JAR,或 jpackage 生成原生安裝包可進一步集成:剪切板歷史、截圖工具、網速監控、剪切板同步、快捷鍵綁定(需 JNativeHook 等庫)。保持單一職責,每個功能模組化,便於維護與擴展。