Java程序完成以后 對于Windows操作系統(tǒng) 習慣總是想雙擊某個exe文件就可以直接運行程序 現(xiàn)我將一步一步的實現(xiàn)該過程 最終結(jié)果是:不用安裝JRE環(huán)境 不用安裝數(shù)據(jù)庫 直接雙擊一個exe文件 就可以運行程序
目前成都創(chuàng)新互聯(lián)公司已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站改版維護、企業(yè)網(wǎng)站設(shè)計、融安網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
下面我將以我最近寫的一個程序作例子 進行該打包過程
該程序是使用了:Hibernate Spring Derby的Java GUI (JDK需要 版本 因該版本才有Derby) 我使用的是Eclipse進行開發(fā)
第一步:完成Java GUI程序
在Eclipse下 程序能夠正常運行
第二步:準備清單文件(MANIFEST MF)
方法 :直接拷貝其它能運行的JAR文件中的MANIFEST MF進行修改
方法 :利用IDE工具 如Eclipse在生成JAR文件時自動生成
MANIFEST MF內(nèi)容如下:
Manifest Version:
Main Class: manager ui MainFrame
Class Path: /lib/spring jar /lib/hibernate jar /lib/derby jar
SplashScreen Imager: manager/resources/images/splash jpg
說明:
Manifest Version - 指定清單文件的版本號
Main Class -指定程序運行的入口類 注意 類名后不要加class擴展名
Class Path -指定支持庫的路徑 指程序運行目錄 即導出的JAR包所在目錄 程序運行時依據(jù)Class Path項的設(shè)置路徑來查找支持庫 每一個支持庫之間用空格隔開 在這里使用了hibernate spring derby
注意:
如果Java應用程序用到了一些Eclipse包 那么就必須將這些包也復制到程序運行目錄 設(shè)置到Class Path 否則程序?qū)o法運行 引用了一些外部組件也需要如此設(shè)置 如hibernate spring derby
除了入口類的包名和類名之外 其他設(shè)置項都不分大小寫 比如 Class Path寫成class path或CLASS PATH也可以 swt jar寫成SWT JAR也行
類名后不要加class擴展名
每一行的 : 后都有一個空格 如Class Path:空格 /lib/spring jar
Class Path中 引入的JAR文件每行不得超過 個 否則會報錯 但在讓人意外的是每行只有前 個有效 故將所有同類型的JAR文件做成一個JAR文件 如我這里的spring jar hibernate jar derby jar都是同類JAR文件的組合
第三步:修改spring配置文件
在spring的 sessionFactory bean的配置中則要這樣寫(與程序中ClassPathXmlApplicationContext對應)
property name= mappingLocations
list
valuemanager/entity/MyFile hbm xml/value
valuemanager/entity/FileType hbm xml/value
/list
/property
第四步:使用Eclipse生成JAR文件
右鍵單擊項目名 在彈出菜單中選擇 Export 在彈出的如下圖所示的對話框中 選擇 JAR文件 單擊 Next
將右邊不需要的文件都取消勾選 在 選擇導出目標(Select the export destination) 項文本框中設(shè)置JAR包的輸出路徑和包名(可以任意取名)為 D:\manager\manager jar 接受其他的默認設(shè)置不變 單擊 Next
附注 左邊雖然選擇了src目錄 但源文件并不會導出到包中 除非勾選了 導出Java源代碼文件和資源(Export java source files and resources) 項
接受默認設(shè)置不變 單擊 Next
這一步較關(guān)鍵 如下圖所示 選擇 從工作空間中使用現(xiàn)有清單 項 將創(chuàng)建的清單文件輸入 也可以通過旁邊的 瀏覽 按鈕來選擇清單文件 輸入清單文件后 單擊 Finish Eclipse開始將項目打包
附:這里也可以選擇Generate the manifest file 但生成的清單文件MAINFEST MF需要修改
注意:清單文件MAINFEST MF一定要按第二步那樣設(shè)置
生成的JAR文件目錄如下:
第五步:生成運行manager jar的批處理文件manager bat(該步可以不要)
在manager目錄下創(chuàng)建一個批處理程序manager bat(名字任取 擴展名必須是bat) 其內(nèi)容僅一句語句 如下
javaw jar manager jar
說明
javaw對應c:\jdk\jre\bin\javaw exe文件 如果windows提示命令未發(fā)現(xiàn) 則需要將c:\jdk\jre\bin路徑加入到windows環(huán)境變量path中
在運行程序的時候有一個討厭的黑色命令行窗口 要去掉它 可以將run bat內(nèi)容更改如下 start javaw jar manager jar start是指調(diào)用了windows的 運行 命令
在后邊加一個pause就可以讓你看到具體哪里出錯了 如:
start javaw jar manager jar
pause
雙擊manager bat 就可以運行該JAR文件了
第六步:讓電腦不必安裝JRE環(huán)境 也能運行
通常運行Java程序有個前提條件 用戶電腦必須先安裝JRE環(huán)境 雖然安裝JRE環(huán)境非常簡單 但畢竟多了一步 算是有一點點的瑕疵 這里給出一個不必讓用戶安裝JRE環(huán)境的方法 其實現(xiàn)步驟如下
( )將原JDK中的 jre 目錄復制到 D:\manager\java 目錄下(java也可換成其他名稱)
( )將JDK和JRE從本機卸載掉 這樣表示本機沒有安裝JAVA運行環(huán)境
( )修改批處理文件manager bat中的命令為 start java\jre\bin\javaw jar manager jar 僅僅是在javaw前加上了一個相對應路徑
雙擊manager bat即可在不安裝JRE環(huán)境的電腦運行此Java應用程序
第七步:拋棄批處理文件(* bat) 生成exe文件
用批處理文件運行程序似乎不夠?qū)I(yè) 雖然它足以完成運行任務 但習慣就象一種毒藥一旦染上就很難擺脫它的影響 Windows統(tǒng)治下的人們早已經(jīng)習慣運行擴展名是EXE的程序 用* bat他們就會感覺別扭
我們可以用一個叫JavaLauncher的免費小程序來代替批處理文件去運行Java程序 JavaLauncher的下載網(wǎng)址是
下載下來的文件是一個名JavaLauncher zip的壓縮包 解壓后的目錄結(jié)構(gòu)如下所示
JavaLauncher zip目錄結(jié)構(gòu)
source??????? 目錄包含了JavaLauncher的源程序 是用C語言寫的
changes txt?? 是新版的修改說明
launch exe??? 是主程序
launcher cfg? 是配置文件
readme txt??? 是一些說明和示例
我們只需要launch exe launcher cfg兩個文件 將這兩個文件復制到打包文件所在的目錄 launcher cfg是一個僅三行內(nèi)容的文本文件 將它修改如下
\java\jre\bin\javaw exe
jar manager jar
第一行設(shè)置指向JAR包managger jar的目錄 由于launch exe和myswt jar同在一個目錄 所以用 即當前目錄
第二行設(shè)置指向jre\bin\javaw exe的路徑 在上面已將jre目錄復制到了java子目錄中
配置好launcher cfg后 雙擊launch exe即可運行java應用程序
如果仔佃研究eclipse的啟動方式 發(fā)現(xiàn)eclipse和JavaLauncher的原理一樣 eclipse exe相當于launch exe startup jar相當于manager jar 只不過eclipse exe不象launch exe要具有通用性 所以它沒有* cfg這樣的配置文件 而是將啟動信息固化在eclipse exe中
第八步:美化圖標
launch exe文件的圖標太單調(diào)了 讓我們給它換個好看點的 換程序的圖標需要用到一個免費的軟件 Resource Hacker
第九步:最后的打包
發(fā)送給用戶之前 通常要用WinZip或WinRAR將所有的文件全部打成一個壓縮包 然后用戶得到這個壓縮包后 將其解壓縮后即可運行程序 Eclipse軟件就是這種方式
lishixinzhi/Article/program/Java/hx/201311/25574
本人不是高手,直到現(xiàn)在還在家里學。按理說是沒有資格在此嘮舌的
但是寫了一點代碼,人有點累。于是上來玩玩
我覺得應該從最基礎(chǔ)的學起:數(shù)據(jù)類型、變量、運算符、表達式、語句、指令、順序,選擇,循環(huán),數(shù)組,函數(shù) 結(jié)構(gòu)(對以后學習類大有幫助)
最好以c為例
這方面的好書有C程序設(shè)計譚浩強教授的,21天學通C語言,瓊斯布朗的,后者學起來輕松一些前者對簡單算法涉及的多一些
然后簡單地學一下C++,不一定非得學太多(當然了精力充沛對之興趣濃厚的例外),以封裝,繼承、多態(tài)為主
當然了也可不進行第二步直接開始學Java,不過第一步一定要走好
至于Java方面,把前面二步甚至第一步做好了學起來很容易,我也沒看什么Think in Java
祝你成功!充分至Java中獲得樂趣......
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class GradeStatistic {
public static void main(String[] args) {
GradeStatistic gs = new GradeStatistic();
ListMark list = new ArrayListMark();
float sum = 0;
while(true){
Scanner sc = new Scanner(System.in);
System.out.print("Please input student name: ");
String name = sc.nextLine();
if(name.equals("end")){
break;
}
System.out.print("Please input student score: ");
float score = sc.nextFloat();
sum += score;
list.add(gs.new Mark(name, score));
}
float max = list.get(0).getScore();
float min = list.get(0).getScore();
for(Mark mark: list){
if(max mark.getScore()){
max = mark.getScore();
}
if(min mark.getScore()){
min = mark.getScore();
}
}
float average = sum / list.size();
System.out.println("Average is: " + average);
System.out.println("Max is: " + max);
System.out.println("Min is: " + min);
}
private class Mark{
private String name;
private float score;
public Mark(String name, float score){
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public float getScore() {
return score;
}
}
}
----------------------
Please input student name: Zhang san
Please input student score: 100
Please input student name: Li Si
Please input student score: 91
Please input student name: Ec
Please input student score: 35
Please input student name: ma qi
Please input student score: 67
Please input student name: end
Average is: 73.25
Max is: 100.0
Min is: 35.0