java實現可安裝的exe程序
通過編寫Java代碼,實現可安裝的exe文件的一般思路:
1、在eclipse中創建java項目,然后編寫Java代碼,將編寫好的Java項目導出一個.jar格式的jar包;
2、通過安裝exe4j軟件,將導出的.jar格式的文件制作成.exe格式的可執行的文件,(注意:此時的.exe文件只是可以執行,還不能夠安裝);
3、通過安裝Inno setup軟件,將可執行的.exe格式的文件、.jar格式的文件以及其它需要的文件制作成一個可安裝的.exe格式的文件;
4、非常注意:在exe4j和Inno setup軟件中選擇的路徑都是相對路徑,因此在導出的jar包、exe4j、Inno setup等軟件執行的過程中,強烈建議一直保持在一個文件夾內進行操作和輸出文件;
通過java代碼實現可安裝的exe格式文件的一般步驟如下:
一、創建java項目,編寫好java代碼,導出jar包:
1、創建java項目,編寫java代碼就不用多說了;
2、如果需要可以將程序中的一些信息,寫在一個項目(jar包)外部的.ini格式的配置文件中去,比如客戶端鏈接服務端的IP、端口號等信息,以后服務端的IP和端口號修改了,只需要修改配置文件即可,不需要修改java代碼了,具體步驟如下:
(非常注意:.ini格式的配置文件最好是和項目(jar)包在一個工作目錄下)
(1)創建.ini格式的配置文件,然后在配置文件中寫入信息,以key-value鍵值對的形式進行書寫:

(2)在項目中編寫java代碼,在項目或程序啟動時,首先讀取.ini格式的配置文件中的信息,將獲取的信息給項目中需要的地方,讀取.ini格式文件信息的代碼如下:
package com.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import com.model.ServerInfo;
/**
* 讀取連接服務端配置信息的.ini格式文件信息的工具類
* @author admin
*
*/
public class LoadServerInfo {
public static ServerInfo LoadIniFile(){
Properties properties = new Properties();
File exeWorkFile = new File("");//獲取jar或exe或項目工作目錄的路徑
String iniPath = exeWorkFile.getAbsolutePath()+File.separator+"serverInfo.ini";//獲取.ini格式文件的路徑
ServerInfo serverInfo = new ServerInfo();
try {
properties.load(new FileInputStream(iniPath));//讀取.ini格式文件中的信息
//通過key獲取.ini文件中對應的value值,並將該value值存儲到一個對象中去
serverInfo.setIP(properties.getProperty("IP"));
serverInfo.setPortNumber(Integer.valueOf(properties.getProperty("portNumber")));
} catch (IOException e) {
e.printStackTrace();
}finally{
return serverInfo;//將存有.ini格式文件中信息的對象返回
}
}
public static void main(String[] args) {
ServerInfo serverInfo = LoadServerInfo.LoadIniFile();
System.out.println(serverInfo);
}
}
對應的存儲服務端信息的實體類代碼如下:
package com.model;
/**
* 連接服務端配置信息實體類
* @author admin
*
*/
public class ServerInfo {
private String IP;//服務端IP
private Integer portNumber;//服務端的Socket端口號
public ServerInfo(){
}
public ServerInfo(String iP, Integer portNumber) {
super();
IP = iP;
this.portNumber = portNumber;
}
public String getIP() {
return IP;
}
public void setIP(String iP) {
IP = iP;
}
public Integer getPortNumber() {
return portNumber;
}
public void setPortNumber(Integer portNumber) {
this.portNumber = portNumber;
}
@Override
public String toString() {
return "ServerInfo [IP=" + IP + ", portNumber=" + portNumber + "]";
}
}
3、導出jar包:
步驟一:

步驟二:

步驟三:

二、通過安裝exe4j軟件,將jar包制作成可執行的exe格式文件(注意:此時的exe格式文件只是可以執行,但是不可以安裝):
1、下載exe4j軟件,然后按照正常的進行安裝即可:
2、步驟一:

3、步驟二:

4、步驟三:注意選擇路徑的時候一定要選擇存放有jar包、jre等文件的文件夾所在的路徑,這也是輸出.exe格式文件的路徑,強烈建議這樣寫;

5、步驟四:填寫可執行exe文件名稱、選擇exe可執行程序的圖標、一台計算機上是否只允許有一個該程序啟動;
非常注意:ICO格式的文件一定是通過PS輸出ICO格式的圖片,不能夠將其它格式文件強制修改為ICO格式文件,否則會報異常:
java.io.IOException:icon file does not contain icon data;

6-1、步驟五-1:設置編碼格式為UTF-8,輸入內容是:-Dfile.encoding=utf-8
如果不設置編碼格式的話,服務端傳遞給客戶端的中文會在客戶端中顯示會變為亂碼;

6-2、步驟五-2:將項目導出的jar包添加進來,非常注意:此時的jar包路徑一定要相對路徑,因為上述選擇輸出.exe格式文件的路徑就是jar包所在文件夾的路徑,即exe4j軟件工作空間就是jar包所在的路徑,相對路徑是相對於工作空間來說的,因為jar包就在工作空間的根目錄下,因此只接寫jar包的文件名+格式即可;

7、步驟六:選擇執行項目時,首先執行的第一個java類,類似於在BS項目中,訪問某個項目時設置訪問首頁一樣;

8、步驟七:項目的jar包和項目訪問的首類設置好后,直接next下一步即可;

9、步驟八:利用exe4j制作的.exe格式文件默認的是32位操作系統的文件,如果要制作64位操作系統的文件,可以按照下圖進行選擇設置;

10、步驟九:設置程序運行時jre的版本范圍;

11、步驟十:因為創建的是java項目,項目最終是要在jvm上進行運行的,如果要用戶自己安裝jdk,配置環境變量非常的不方便,因此可以制作的過程中將jre封裝進行,可以自己設定好運行環境jre的版本,讓用戶更加方便的使用程序,下圖是為程序設定Jre運行環境的步驟:非常注意:jre要放在和jar包同級目錄下,這樣就可以寫相對目錄了,否則容易出現文件;




12、步驟十一:以后直接默認next即可:




三、通過安裝Inno setup軟件,將可執行的.exe文件、jar文件、jre文件封裝到一個可以安裝的.exe文件:
1、安裝Inno setup軟件,並啟動該軟件:

2、默認next即可:

3、設置程序安裝時默認創建的安裝文件夾以及程序的版本號等信息:

4、默認next即可:

5、選擇可執行的.exe格式文件的目錄:


6、將可執行的.exe文件、jar包、jre文件所在的文件夾添加進來,並且將該文件夾內的所有文件均添加進來,這樣可以設置成相對路徑了就:



7、默認next即可:

8、在.exe文件、jar包、jre文件所在的文件夾內創建1.txt、2.txt、3.txt三個文本文件,並按照下圖依次設置即可,我也不知具體原因,可能是要存儲一些運行過程中的信息吧:


9、默認next即可:

10、設置輸出可安裝的.exe格式文件的位置、輸出的.exe格式的文件名稱、可安裝程序的桌面圖標,
非常注意:
(1)可安裝的.exe格式文件輸出位置一定也要是jar包、jre文件、可執行.exe文件所在的文件夾;
(2)ICO格式的文件一定是通過PS輸出ICO格式的圖片,不能夠將其它格式文件強制修改為ICO格式文件,否則會報異常:
java.io.IOException:icon file does not contain icon data;

11、直接默認next,按照圖片上步驟進行即可:





12、制作完畢,現在可以看一下可以安裝的.exe格式文件了:

13、最終,只需要將可安裝的exe文件,即上圖片中的setup.exe(存儲大的exe文件)發給用戶安裝即可,其它的jar包、jre、可執行exe等文件都封裝在了可安裝exe文件內,只用可安裝的exe程序即可;
