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

4.1 KiB
Raw Blame History

这是一个专门为 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 组件(如 ModernJarViewerDecryptionUI),使用 SwingUtilities.invokeLater 确保在事件调度线程EDT中创建界面保证线程安全。
  • 参数剥离: 采用 List<String> remainingArgs 机制,将系统级参数(如目录设置)与业务级参数(待处理文件)分离。

6. 与 AxisInnovatorsBox 的关系

Main 类是第一级入口,而 AxisInnovatorsBox 是第二级核心。

  • 如果 Main 识别到特定文件,它会配置一个轻量级的 AxisInnovatorsBox 实例(quickStart=true)。
  • 如果没有特定文件,它将锁定单实例环境,并启动完整的 AxisInnovatorsBox 重量级主循环。

文档生成时间: 2026-01-02