diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 736d22b..de63a22 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,6 +3,7 @@ + diff --git a/src/main/resources/icons/logo.ico b/logo.ico similarity index 100% rename from src/main/resources/icons/logo.ico rename to logo.ico diff --git a/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java b/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java index 7739d30..378e70e 100644 --- a/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java +++ b/src/main/java/com/axis/innovators/box/AxisInnovatorsBox.java @@ -12,11 +12,9 @@ import com.axis.innovators.box.register.RegistrationSettingsItem; import com.axis.innovators.box.register.RegistrationTool; import com.axis.innovators.box.register.RegistrationTopic; import com.axis.innovators.box.register.LanguageManager; -import com.axis.innovators.box.tools.ArgsParser; -import com.axis.innovators.box.tools.LibraryLoad; -import com.axis.innovators.box.tools.StateManager; -import com.axis.innovators.box.tools.SystemInfoUtil; +import com.axis.innovators.box.tools.*; import com.axis.innovators.box.util.PythonResult; +import com.axis.innovators.box.util.Tray; import com.axis.innovators.box.util.UserLocalInformation; import com.axis.innovators.box.verification.UserTags; import com.formdev.flatlaf.FlatLightLaf; @@ -380,6 +378,14 @@ public class AxisInnovatorsBox { main.progressBarManager.close(); + new Thread(() -> { + try { + Tray.init(); + } catch (RegisterTray.TrayException e) { + throw new RuntimeException(e); + } + }, "TrayThread").start(); + SwingUtilities.invokeLater(() -> { try { main.ex = new MainWindow(); diff --git a/src/main/java/com/axis/innovators/box/decompilation/gui/ModernJarViewer.java b/src/main/java/com/axis/innovators/box/decompilation/gui/ModernJarViewer.java index 40617eb..c152136 100644 --- a/src/main/java/com/axis/innovators/box/decompilation/gui/ModernJarViewer.java +++ b/src/main/java/com/axis/innovators/box/decompilation/gui/ModernJarViewer.java @@ -53,7 +53,7 @@ public class ModernJarViewer extends JFrame { public ModernJarViewer(Frame owner) { setTitle("Jar反编译工具"); - setDefaultCloseOperation(EXIT_ON_CLOSE); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); initComponents(); } diff --git a/src/main/java/com/axis/innovators/box/tools/RegisterTray.java b/src/main/java/com/axis/innovators/box/tools/RegisterTray.java index 625495b..29221a1 100644 --- a/src/main/java/com/axis/innovators/box/tools/RegisterTray.java +++ b/src/main/java/com/axis/innovators/box/tools/RegisterTray.java @@ -20,7 +20,7 @@ public class RegisterTray { * 托盘菜单项构建器(流畅接口) */ public static class MenuBuilder { - private final List items = new ArrayList<>(); + private List items = new ArrayList<>(); /** * 添加菜单项 @@ -42,6 +42,27 @@ public class RegisterTray { return this; } + /** + * 添加菜单项 + * @param id 菜单项唯一标识符(需大于0) + * @param label 菜单显示文本 + * @param onClick 点击事件处理器 + * @return 当前构建器实例 + */ + public MenuBuilder addItem(MenuBuilder builder,int id, String label, MenuItemClickListener onClick) { + this.items = builder.items; + items.add(new Item( + id, + label, + "", "", "", + (Event) combinedId -> { + int itemId = (int)(combinedId >> 32); + onClick.onClick(itemId); + } + )); + return this; + } + /** * 构建菜单项列表 * @return 可用于注册的菜单项集合 @@ -219,15 +240,11 @@ public class RegisterTray { .register(); // 程序主循环 - while (true) { - Thread.sleep(1000); - } - } catch (RegisterTray.TrayException | InterruptedException e) { + //while (true) { + // Thread.sleep(1000); + //} + } catch (RegisterTray.TrayException e) { e.printStackTrace(); } } - - //static { - // System.loadLibrary("RegisterTray"); - //} } \ No newline at end of file diff --git a/src/main/java/com/axis/innovators/box/util/Tray.java b/src/main/java/com/axis/innovators/box/util/Tray.java new file mode 100644 index 0000000..27cddc9 --- /dev/null +++ b/src/main/java/com/axis/innovators/box/util/Tray.java @@ -0,0 +1,128 @@ +package com.axis.innovators.box.util; + +import com.axis.innovators.box.AxisInnovatorsBox; +import com.axis.innovators.box.browser.MainApplication; +import com.axis.innovators.box.decompilation.gui.ModernJarViewer; +import com.axis.innovators.box.tools.RegisterTray; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Random; + +/** + * 加载默认托盘系统 + * @author tzdwindows 7 + */ +public class Tray { + private static final Random random = new Random(); + private static final String trayName = "轴创工具箱 v1.1"; + private static final String trayDescription = "轴创工具箱"; + private static final String trayIcon =System.getProperty("user.dir") + "/logo.ico"; + private static List menuItems = null; + private static final List idx = new ArrayList<>(); + private static final List trayLabelsList = new ArrayList<>(); + private static final List actions = new ArrayList<>(); + private static RegisterTray.MenuBuilder menuBuilders = null; + private static long trayAddress = -1; + + static { + try { + actions.add(() -> { + SwingUtilities.invokeLater(() -> { + AxisInnovatorsBox.getMain().getMainWindow().setVisible(true); + }); + }); + + load(new TrayLabels("启动 Jar 查看器", () -> SwingUtilities.invokeLater(() -> { + ModernJarViewer viewer = new ModernJarViewer(null); + viewer.setVisible(true); + }))); + + load(new TrayLabels("启动 HTML 查看器", new Runnable() { + @Override + public void run() { + SwingUtilities.invokeLater(() -> { + MainApplication.popupHTMLWindow(""); + }); + } + })); + + load(new TrayLabels("退出程序", () -> AxisInnovatorsBox.getMain().quit())); + } catch (RegisterTray.TrayException e) { + throw new RuntimeException(e); + } + } + + /** + * 注册加载托盘 + * @param trayLabels 托盘信息 + * @throws RegisterTray.TrayException 抛出错误 + */ + public static void load(TrayLabels trayLabels) throws RegisterTray.TrayException { + if (trayLabels == null || trayLabelsList.contains(trayLabels)){ + System.err.println("trayLabels is null or trayLabelsList contains trayLabels"); + return; + } + trayLabelsList.add(trayLabels); + + if (menuBuilders == null) { + RegisterTray.MenuBuilder menuBuilder = new RegisterTray.MenuBuilder() + .addItem(trayLabels.id, trayLabels.name, itemId -> trayLabels.action.run()); + menuBuilders = menuBuilder; + menuItems = menuBuilder.build(); + } else { + menuBuilders = new RegisterTray.MenuBuilder() + .addItem(menuBuilders, trayLabels.id, trayLabels.name, itemId -> trayLabels.action.run()); + menuItems = menuBuilders.build(); + } + } + + public static void addAction(Runnable action){ + actions.add(action); + } + + public static void init() throws RegisterTray.TrayException { + //if (trayAddress == -1) { + trayAddress = new RegisterTray.TrayConfig() + .title(trayName) + .icon(trayIcon) + .tooltip(trayDescription) + .menu(menuItems) + .onClick(trayId -> { + for (Runnable action : actions) { + action.run(); + } + }) + .register(); + //} + } + + public static class TrayLabels { + private final String name; + //private final String description; + private final Runnable action; + private int id; + + public TrayLabels(String name/*, String description*/, Runnable action) { + this.name = name; + //this.description = description; + this.action = action; + this.id = getId(); + } + } + + /** + * 获取随机id + * @return 获取随机id + */ + public static int getId(){ + int id = random.nextInt(); + if(idx.contains(id)){ + return getId(); + } + idx.add(id); + return id; + } +}