首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JAR 轉 EXE 完整指南:exe4j + Inno Setup 打包部署

     編輯:Java 綜合教學

JAR 轉 EXE 完整指南:exe4j + Inno Setup 打包部署

將 Java Swing/JavaFX 應用打包為 Windows 安裝程序,主流方案:exe4j 生成可執行文件 + Inno Setup 製作安裝包。本文記錄關鍵步驟與避坑指南。

工具準備

  • exe4j(商業軟件,有試用版)
  • Inno Setup(免費開源)
  • JRE 目錄(與目標架構一致:32位/64位)

exe4j 關鍵配置步驟

1. 選擇目標架構

「Executable info」→「Executable type」選擇 32-bit 或 64-bit。必須與打包的 JRE 位數一致,否則運行報錯。

2. JRE 配置(核心)

「JRE」→「Search Sequence」:

  1. 刪除默認所有項
  2. 添加「Directory」類型,指向項目根目錄下的 jre 文件夾(如 HJ小助手/jre)
  3. 取消勾選「Allow fallback to system JRE」

目錄結構示例:

HJ小助手/
├── limitvic1.1.jar
├── jre/          # 裁剪後的 JRE,僅含必要模塊
└── limitvic1.1.exe  # exe4j 生成

3. 資源文件處理(圖片等)

Swing 讀取打包內資源必須用類加載器:

ImageIcon icon = new ImageIcon(ImageIO.read(
    getClass().getClassLoader().getResource("frame.png")
));

且資源文件夾必須在 exe4j「Classpath」中標記為「Resource directory」,否則 getResource 返回 null。

4. 生成 EXE 測試

點擊「Build」生成 .exe,雙擊運行驗證:

  • 無 JAVA_HOME 相關報錯
  • 界面圖片正常顯示
  • 功能邏輯正常

Inno Setup 製作安裝包

腳本關鍵點

[Files]
Source: "HJ小助手\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注意:Source 指向包含 jre 文件夾的父目錄,而非 jre 本身

原因:exe 生成的 EXE 相對路徑查找 ./jre,安裝後目錄結構必須保持:

{app}/
├── limitvic1.1.exe
└── jre/

壓縮效果

  • 原文件夾 ~100 MB(含完整 JRE)
  • Inno Setup 壓縮後 ~30 MB(LZMA/Ultra 壓縮)

常見問題排查

現象原因解決
啟動報 "JAVA_HOME not found"JRE Search Sequence 未指定本地 jreexe4j 配置本地 jre 目錄並禁用 fallback
圖片不顯示用 File/URL 讀取而非類加載器;資源未標記 Resource directory改用 getClass().getClassLoader().getResource();勾選 Resource directory
安裝後運行找不到 jreInno Setup Source 指向錯誤層級Source 指向包含 jre 的父目錄
64位系統運行32位EXE報錯JRE位數與EXE不匹配統一32位或64位

進階優化

  • 使用 jlink (JDK 9+) 定製最小化 JRE,體積可再減 50%+
  • exe4j 支持 Splash 畫面、單實例鎖定、系統托盤、服務模式等
  • 簽名(Code Signing)提升用戶信任,避免 SmartScreen 警告
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved