- 新增浏览器模块技术文档,涵盖 BrowserCore、BrowserWindow 等核心组件 - 添加事件系统文档,包括 EventBus、GlobalEventBus 及各类事件定义 - 创建 LanguageManager 国际化管理器详细说明文档 - 新增 Log4j2OutputStream 标准输出重定向类文档 - 添加 Main 入口类启动流程与路由机制说明 - 创建 BrowserCreationCallback 回调接口使用指南 - 完善 AxisInnovatorsBox 主类架构与崩溃诊断系统文档
4.1 KiB
4.1 KiB
这是一个专门为 com.axis.innovators.box.Main 类编写的技术介绍文档。
Main 类技术文档
包路径: com.axis.innovators.box.Main
主要功能: 应用程序入口点、启动路由、单实例控制
作者: tzdwindows 7
1. 概述
Main 类是 Axis Innovators Box 的核心启动器(Launcher)。它并不直接负责业务逻辑,而是扮演“调度员”的角色。它的主要职责包括初始化基础环境(语言、日志)、解析命令行参数、执行单实例检查,并根据输入文件的类型决定是启动完整的主程序,还是进入特定的“快速启动(Quick Start)”模式。
2. 核心流程与职责
2.1 启动预处理
在程序真正运行前,Main 执行以下环境准备工作:
- 日志清理: 调用
FolderCleaner清理过期的日志文件(保留最近10天)。 - 多语言初始化: 通过
LanguageManager加载用户保存的语言设置,默认为中文(zh_CN)。 - 插件目录重定向: 解析
pluginsDirectory=参数,动态设置插件加载路径。
2.2 启动路由机制 (Quick Start)
这是 Main 类最显著的特性。它会分析命令行传入的文件扩展名,并进行智能跳转:
| 文件类型 | 触发行为 | 对应组件 |
|---|---|---|
.jar |
进入 JAR 可视化分析模式 | ModernJarViewer |
.html |
进入 HTML 浏览模式 | MainApplication |
音乐类 (.mflac, .mgg, .qmc等) |
进入音乐解密界面 | DecryptionUI |
快速启动逻辑: 如果识别到上述特定文件,程序会立即启动对应的专用窗口,释放文件锁,并将 quickStart 标记设为 true,从而跳过完整的主界面初始化过程。
2.3 单实例锁 (Single Instance Lock)
为了防止多个程序实例同时运行冲突,Main 实现了一套基于文件锁的保护机制:
- 锁文件: 在系统临时目录下创建
axis_innovators_box.lock。 - 原理: 利用
FileChannel.tryLock()尝试获取排他锁。如果获取失败,说明已有实例在运行,程序将直接退出。 - 释放: 在程序关闭(Shutdown Hook)或进入快速启动模式时,会自动释放锁。
3. 命令行参数说明
Main 类支持以下关键参数:
-debugControlWindow-on: 开启调试控制窗口(仅在非发布环境下有效)。pluginsDirectory="path": 指定插件的存储目录。- 文件路径: 直接传入文件路径,程序会自动判断扩展名并路由至对应的工具。
4. 关键方法解析
4.1 main(String[] args)
启动主函数。逻辑顺序为:
- 基础环境清理与加载。
- 过滤并解析特定标志位参数。
- 遍历文件参数,检查是否符合“快速启动”条件。
- 如果不是快速启动模式,则尝试获取单实例锁。
- 调用
AxisInnovatorsBox.run()移交控制权。
4.2 acquireLock() & releaseLock()
acquireLock: 尝试在磁盘上锁定文件。如果返回false,则程序退出。releaseLock: 关闭文件通道并删除锁文件。这是确保应用能二次启动的关键清理步骤。
5. 设计模式与技术点
- 资源保护 (Shutdown Hook): 通过
Runtime.getRuntime().addShutdownHook注册清理线程,确保无论程序是正常关闭还是异常中止,都能尝试释放文件锁。 - 异步启动: 对于 UI 组件(如
ModernJarViewer和DecryptionUI),使用SwingUtilities.invokeLater确保在事件调度线程(EDT)中创建界面,保证线程安全。 - 参数剥离: 采用
List<String> remainingArgs机制,将系统级参数(如目录设置)与业务级参数(待处理文件)分离。
6. 与 AxisInnovatorsBox 的关系
Main 类是第一级入口,而 AxisInnovatorsBox 是第二级核心。
- 如果
Main识别到特定文件,它会配置一个轻量级的AxisInnovatorsBox实例(quickStart=true)。 - 如果没有特定文件,它将锁定单实例环境,并启动完整的
AxisInnovatorsBox重量级主循环。
文档生成时间: 2026-01-02