錯誤現象
IllegalArgumentException: Invalid characters in hostname
安裝程序解析系統主機名/用戶名時遇到非 ASCII 字符 (中文、特殊符號、空格) 導致異常。
根本原因
- Windows 計算機名、用戶名、用戶配置文件路徑包含 **中文字符**、**全角符號**、**空格**。
- JRE 安裝程序 (基於 InstallShield/自定義 Java 安裝器) 內部調用 `InetAddress.getLocalHost()` 或解析路徑構建 URL/URI,要求主機名符合 RFC 952/1123 (僅允許字母數字、連字符、點)。
解決方案 (按推薦順序)
1. 修改計算機名與用戶名為純 ASCII (徹底解決)
- 設置 → 系統 → 關於 → 重命名這台電腦 → 僅用字母數字連字符 (如 `DEV-PC-01`)。
- 控制面板 → 用戶帳戶 → 更改帳戶名稱 → 純英文 (如 `admin`)。
- **重啟電腦** 使環境變量 `USERPROFILE`、`HOMEPATH` 更新為新路徑。
2. 臨時設置環境變量繞過 (不改系統設置)
管理員 PowerShell 執行:
$env:USERNAME = "admin"
$env:COMPUTERNAME = "DEV-PC"
# 或指定安裝目錄參數 (視安裝器支持)
jre-8uXXX-windows-x64.exe /s INSTALLDIR="C:\Java\jre1.8"
3. 使用離線安裝包 + 手動解壓 (綜合安裝器)
- 下載 `.tar.gz` 或 `.zip` 版本 (Oracle 官網需登錄,或使用 Adoptium Temurin、Amazon Corretto、Azul Zulu 開源構建)。
- 解壓到純 ASCII 路徑:`C:\Java\jdk-21`。
- 手動配置 `JAVA_HOME`、`PATH` 環境變量。
4. 檢查安裝日誌定位具體調用棧
安裝器通常在 `%TEMP%` 生成日志 (如 `install.log`、`hs_err_pid*.log`),搜索 `Invalid characters` 定位具備調用類/方法,針對性繞過。
驗證安裝成功
java -version
# 輸出示例:
# openjdk version "21.0.2" 2024-01-16
# OpenJDK Runtime Environment Temurin-21.0.2+13 (build 21.0.2+13)
# OpenJDK 64-Bit Server VM Temurin-21.0.2+13 (build 21.0.2+13, mixed mode, sharing)
避坑指南
- **不要在中文路徑下安裝任何 Java 開發工具** (JDK、Maven、Gradle、Tomcat、IDE),類加載、類路徑、JNI 庫加載、Javadoc 生成均可能因編碼/路徑解析失敗。
- 企業環境推薦統一英文主機名、英文用戶名、純 ASCII 安裝目錄 (`D:\Dev\Java`)。
- 定期更新至 LTS 版本 (8, 11, 17, 21) 獲取安全補丁與性能優化。