---
title: Java 管理
description: 自动 Java 检测、下载和安装
---

# Java 管理

DropOut 提供全面的 Java 管理，自动检测已安装的版本并根据需要下载新版本。

## 自动检测

### 系统扫描

DropOut 扫描多个位置查找 Java 安装：

**Linux:**
- `/usr/lib/jvm/`
- `/usr/java/`
- `$JAVA_HOME`
- `PATH` 环境变量

**macOS:**
- `/Library/Java/JavaVirtualMachines/`
- `/System/Library/Java/JavaVirtualMachines/`
- `$JAVA_HOME`
- `PATH` 环境变量

**Windows:**
- `C:\Program Files\Java\`
- `C:\Program Files (x86)\Java\`
- `%JAVA_HOME%`
- `PATH` 环境变量
- Windows 注册表

### 版本检测

对于找到的每个 Java 安装，DropOut 会：
1. 运行 `java -version` 获取版本信息
2. 解析主要版本（8、11、17、21 等）
3. 检测架构（x64、ARM64）
4. 识别供应商（Oracle、Adoptium 等）

### 结果

所有检测到的 Java 安装都显示在设置 → Java 中：
- 版本号
- 安装路径
- 架构
- 当前选择状态

## Java 下载

### Adoptium 集成

DropOut 集成了 Eclipse Adoptium API 以下载高质量的免费 JDK/JRE 构建版本。

**支持的版本：**
- Java 8（LTS）
- Java 11（LTS）
- Java 17（LTS）
- Java 21（LTS）
- Java 23+（最新版）

**功能：**
- 自动平台检测
- 特定架构的构建版本
- JDK 或 JRE 选择
- 校验和验证

### 下载过程

1. 导航到设置 → Java
2. 点击"下载 Java"
3. 选择版本（例如 Java 17）
4. 选择 JDK 或 JRE
5. 点击下载
6. 等待下载和解压

**进度跟踪：**
- 实时下载速度
- ETA 计算
- 解压进度
- 安装确认

### 目录管理

Java 目录缓存 24 小时以提高性能：

```rust
// 目录结构
{
  "versions": [
    {
      "version": "17.0.9+9",
      "major": 17,
      "url": "https://api.adoptium.net/...",
      "sha256": "...",
      "size": 123456789
    }
  ],
  "last_updated": 1234567890
}
```

**刷新：**
- 24 小时后自动刷新
- 设置中手动刷新
- 下载失败时强制刷新

## 安装

### 下载目录

下载的 Java 运行时安装到：

```
~/.local/share/com.dropout.launcher/java/  (Linux)
~/Library/Application Support/com.dropout.launcher/java/  (macOS)
%APPDATA%/com.dropout.launcher/java/  (Windows)
```

### 目录结构

```
java/
├── jdk-17.0.9+9/
│   ├── bin/
│   │   └── java (或 java.exe)
│   └── lib/
├── jdk-21.0.1+12/
│   ├── bin/
│   └── lib/
└── download_queue.json
```

### 解压

1. 下载到 `.part` 文件
2. 验证校验和
3. 解压存档：
   - Linux/macOS 上的 `.tar.gz`
   - Windows 上的 `.zip`
4. 移动到 `java/<version>/` 目录
5. 设置可执行权限（Unix）

## 配置

### 内存分配

在设置中配置 JVM 内存：

**最小内存：**
- 默认：1024 MB
- 推荐：原版 2048 MB
- 推荐：模组 4096+ MB

**最大内存：**
- 默认：4096 MB
- 根据系统 RAM 调整
- 为操作系统和其他应用留出 4GB

**格式：**
```bash
-Xms1024M -Xmx4096M
```

### 自定义 JVM 参数

为高级配置添加自定义 JVM 参数：

**常用参数：**
```bash
# 垃圾回收
-XX:+UseG1GC
-XX:+UnlockExperimentalVMOptions

# 性能
-XX:G1NewSizePercent=20
-XX:G1ReservePercent=20
-XX:MaxGCPauseMillis=50

# 内存
-XX:G1HeapRegionSize=32M
```

### Java 路径选择

**自动选择：**
- DropOut 为每个 Minecraft 版本推荐最佳 Java 版本
- Java 8 用于 Minecraft 1.12.2 及更早版本
- Java 17 用于 Minecraft 1.18-1.20.4
- Java 21 用于 Minecraft 1.20.5+

**手动选择：**
1. 前往设置 → Java
2. 从检测到的安装中选择
3. 或指定自定义路径

## 版本推荐

### Minecraft 版本 → Java 版本

| Minecraft 版本 | 推荐 Java | 最低 Java |
|-------------------|------------------|--------------|
| 1.7.10 及更早  | Java 8           | Java 8       |
| 1.8 - 1.12.2      | Java 8           | Java 8       |
| 1.13 - 1.16.5     | Java 8 或 11     | Java 8       |
| 1.17 - 1.17.1     | Java 16          | Java 16      |
| 1.18 - 1.20.4     | Java 17          | Java 17      |
| 1.20.5+           | Java 21          | Java 21      |

### 模组 Minecraft

**Fabric:**
- 通常与原版要求匹配
- 一些模组可能需要更新的 Java

**Forge:**
- 可能需要特定的 Java 版本
- 检查模组加载器文档
- 通常需要完全匹配版本

## 故障排除

### 未检测到 Java

**问题：** 已安装的 Java 未显示

**解决方案：**
1. 验证 Java 在标准位置
2. 检查 `JAVA_HOME` 环境变量
3. 将 Java `bin` 目录添加到 `PATH`
4. 重启 DropOut
5. 手动选择路径

### 下载失败

**问题：** Java 下载未完成

**解决方案：**
1. 检查互联网连接
2. 验证磁盘空间
3. 尝试不同版本
4. 清除下载队列
5. 从 Adoptium 手动下载

### Java 版本错误

**问题：** 由于 Java 版本导致游戏崩溃

**解决方案：**
1. 检查 Minecraft 版本要求
2. 下载正确的 Java 版本
3. 在设置中选择适当的 Java
4. 验证 Java 路径正确

### 内存不足错误

**问题：** 游戏因内存错误崩溃

**解决方案：**
1. 增加最大内存分配
2. 关闭其他应用程序
3. 升级系统 RAM
4. 使用 64 位 Java
5. 优化 JVM 参数

### 性能问题

**问题：** 低 FPS 或卡顿

**解决方案：**
1. 调整内存分配（不要太高！）
2. 启用 G1GC 垃圾收集器
3. 添加性能 JVM 参数
4. 如兼容使用更新的 Java 版本
5. 为整合包分配 4-8GB

## API 参考

### Tauri 命令

**检测 Java 安装：**
```typescript
const javas = await invoke('detect_java_installations');
// 返回: Array<{ path: string, version: string, major: number }>
```

**获取 Java 目录：**
```typescript
const catalog = await invoke('get_java_catalog');
// 返回: { versions: Array<JavaVersion>, last_updated: number }
```

**下载 Java：**
```typescript
await invoke('download_java', { 
  version: '17.0.9+9',
  variant: 'jdk' // 或 'jre'
});
```

**取消 Java 下载：**
```typescript
await invoke('cancel_java_download');
```

**设置 Java 路径：**
```typescript
await invoke('set_java_path', { path: '/path/to/java' });
```

### 事件

**下载进度：**
```typescript
listen('java-download-progress', (event) => {
  const { percent, speed, eta } = event.payload;
});
```

**下载完成：**
```typescript
listen('java-download-complete', (event) => {
  const { path, version } = event.payload;
});
```

## 最佳实践

### 对于玩家

1. **使用 Adoptium 构建版本** - 免费、高质量、维护良好
2. **Java 与 Minecraft 版本匹配** - 检查版本要求
3. **不要过度分配内存** - 为操作系统留出 RAM
4. **保持 Java 更新** - 安全性和性能
5. **使用 64 位 Java** - 大内存所需

### 对于开发者

1. **测试多个 Java 版本** - 确保兼容性
2. **记录 Java 要求** - 帮助用户
3. **处理缺少的 Java** - 优雅的后备方案
4. **启动前验证 Java 路径**
5. **提供清晰的错误** - 当 Java 错误时

## 高级主题

### 自定义 Java 安装

使用自定义 Java 安装：

1. 手动安装 Java
2. 记录安装路径
3. 在 DropOut 设置 → Java 中
4. 点击"自定义路径"
5. 浏览到 Java 可执行文件
6. 验证版本正确

### 服务器用 Java

运行 Minecraft 服务器时：

```bash
# 推荐的服务器 JVM 参数
-Xms4G -Xmx4G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1
```

### GraalVM

GraalVM 支持高级用户：

1. 从 graalvm.org 下载 GraalVM
2. 手动安装
3. 作为自定义 Java 添加到 DropOut
4. 可能提高性能
5. 使用前彻底测试
