Java to exe

      在〈Java to exe〉中尚無留言

目的

2015年出差大陸杭州, 需為生產線寫一支產測程式. 那時只會Java, 理所當然使用Java撰寫. 但寫到一半突然想到, 為了執行編譯出來的jar執行檔, 需替每台電腦安裝jdk/jre. 不幸的是, 全公司上下只有本人會安裝, 而且生產線百餘台電腦, 只靠我一人, 不就裝到往生了嗎.

當然各位看倌們會覺的不可思議, 就安裝個jdk嘛, 教導員工如何安裝有啥難的!! 其實生產線上的員工, 很多都是家境貧苦, 初高中一畢業就出來工作分擔家計的. 看在眼裏, 慈悲在心裏, 能有所苛求嗎.

怎麼辦, 只好硬著頭皮改用 C#. 但那時的我, 從沒摸過C#, 還好一摸之後發覺跟Java語法差不多, 所以短短半天的時間就寫出來了.

此事雖然練就了本人日後C#的功力, 卻也著實覺得Java的無耐. 但又狐疑市面上許多Java寫出來的程式都是以exe檔發佈, 這到底怎麼辦到的呢? 如今雜事較少, 腦袋也較靈光了, 所以就來研究一下.

exe4j

在Windows作業系統中, 如果能將java編出來的class/jar轉成exe, 讓使用者不需安裝jdk, 而且直接按二下就可以執行, 這是多麼美滿的世界.

目前在Windows作業系統中可以達成此功能且最主流的, 莫過於exe4j這套軟体. 偏偏這軟体又需付費. 怎麼辦呢, 唉,  只好~~~
請到 exe4j官網 下載, 至於序號嘛, 請看倌們Google一下囉

也許有人腦中又開始在想, 那Linux是否也可行?? 如果你真的會使用Linux, 就不會想這些五四三的.

exe4j_1

先前知識

要將Java寫出來的成品轉成exe, 需先知道如下基本知識

1. 在NetBeans按 F6, NetBean會將Source Code編譯成.class檔, 並放在 build\classes\ 之下

2. 要轉成 exe之前, 需先將所有的 .class檔 build成jar檔. 請由Netbeans的 Run/Build Project 或者是按F11執行, 然後就會在dist目錄下產生jar檔, 比如GameRock.jar

3. 如果電腦有裝jdk/jre的話, 直接在檔案總管按二下 GameRock.jar 就可以執行了. 那如果把GameRock.jar copy到沒有安裝jdk的電腦上, 當然就死給你看了.

4. 執行我們完成的GameRock.jar檔, 勢必需要 java.exe這支vm程式及系統內建的jar檔. 那這些檔案是否需要包進GameRock.jar呢?? 答案是~~No, 不要包進去, 但發行時需一併附加. 只要在GameRock.exe將class path指向這些附加的jre即可.

5. 附加系統的jre需要200M以上. 若如果我發行10支java程式, 不就每支都要有獨立的jre嗎, 這下不就變成要2000M?? 答案是~~yes.

準備動作

1. 將Netbeans開發的程式, 由Run/Build Project產生jar檔, 此檔存放在dist目錄下. 將此檔copy到 \tmp\source目錄
2. 將 C:\Program Files\Java\jdk1.8.0_201\jre 整個目錄 copy 到 \tmp\exe目錄之下.

步驟

首先點選JAR in EXE mode

exe4j_s1

Short name可以隨便填, Output directory 選取要輸出的目錄

exe4j_s2

接下來如果是圖型介面, 就要選取GUI application. Advanced Options要選32-bit or 64-bit, 不選的話, 無法執行

exe4j_s3

然後要勾選 Generate 64-bit executable

exe4j_s4

Executable name是執行檔的名稱

exe4j_s5

Archive就是要選擇NetBeans所編譯出來的 jar 檔

exe4j_s6

MainClass按下去後, 再選取 MainJFrame

exe4j_s7

最小及最大版本, 請輸入JDK的版本號碼. Advanced Option 選取Search sequence, 此搜尋順序是指要搜尋jdk所在的位置

exe4j_s8

將搜尋位置全部刪除

exe4j_s9

然後加入 Directory, 然後再選取 exe\jre 之下的目錄. 請注意, 是copy 到 exe目錄下的jre喔, 不是系統的 jre

exe4j_s10

再選取 Client hotspot VM

exe4j_s11

最後,  按下Finish後, 在 exe目錄就會產生exe檔了. 發佈時, 需把整個 exe目錄發佈出去.

花絮

沒有exe4j就真的無法轉成exe檔嗎?? 其實不然. 對於會寫C#的人, 其實在也簡單不過了, 只需使用C#調用外部行程的方式去啟動jar即可. 這部份待日後本人有空再來撰寫.

以下是編排時產生的亂碼, 無需理會

 A-XVK258563F-1p4lv7mg7sav
 A-XVK209982F-1y0i3h4ywx2h1
 A-XVK267351F-dpurrhnyarva
 A-XVK204432F-1kkoilo1jy2h3r
 A-XVK246130F-1l7msieqiwqnq
 A-XVK249554F-pllh351kcke50
 A-XVK238729F-25yn13iea25i
 A-XVK222711F-134h5ta8yxbm0
 A-XVK275016F-15wjjcbn4tpj
 A-XVK275016F-15wjjcbn4tpj

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *