Files
window-axis-innovators-box1.17/api-documentation/Main.md
tzdwindows 7 7badbb0d8e docs: 添加 Axis Innovators Box 框架完整 API 文档
- 新增浏览器模块技术文档,涵盖 BrowserCore、BrowserWindow 等核心组件
- 添加事件系统文档,包括 EventBus、GlobalEventBus 及各类事件定义
- 创建 LanguageManager 国际化管理器详细说明文档
- 新增 Log4j2OutputStream 标准输出重定向类文档
- 添加 Main 入口类启动流程与路由机制说明
- 创建 BrowserCreationCallback 回调接口使用指南
- 完善 AxisInnovatorsBox 主类架构与崩溃诊断系统文档
2026-01-03 08:46:19 +08:00

75 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

这是一个专门为 `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)`
启动主函数。逻辑顺序为:
1. 基础环境清理与加载。
2. 过滤并解析特定标志位参数。
3. 遍历文件参数,检查是否符合“快速启动”条件。
4. 如果不是快速启动模式,则尝试获取单实例锁。
5. 调用 `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*