Posted on 2007-03-13 08:57
Matthew Chen 閱讀(357)
評論(0) 編輯 收藏
java是OOP時代的新寵兒,它有著其他語言無法替代的魅力,正是這種魅力是著無數(shù)的程序員趨之若鷲,與此同時存在著一些菜鳥如我之流,常常因?yàn)閷懥艘稽c(diǎn)小小的程序而無法發(fā)布急得如熱鍋上的螞蟻。下面是一點(diǎn)點(diǎn)關(guān)于發(fā)布java程序的知識。希望能夠滿足諸位的發(fā)布欲望。
當(dāng)然,我在這里所謂的發(fā)布java程序,是指非applet,java severlet,jsp等程序的發(fā)布,而是指有frame,可以單獨(dú)運(yùn)行(指需要java虛擬環(huán)境)。
眾所周知,java需要在他的虛擬環(huán)境運(yùn)行,這樣是java的跨平臺的基礎(chǔ),同時也增加了使用者的困窘。要想運(yùn)行java程序必須建立一個運(yùn)行環(huán)境,其實(shí)這并不困難,從sun的網(wǎng)站下載一個即可,安裝也沒有什么特殊之處。不過這些都不是開發(fā)者所考慮的問題,我象前文提到的諸位菜鳥包括我之內(nèi)都沒有考慮過把這個java的環(huán)境也發(fā)布給用戶,我們想的知識把文件打包,用戶點(diǎn)擊某個文件即可運(yùn)行對吧。所以我們學(xué)要考慮的是一個classpath的問題。classpath對于初學(xué)者是一個比較麻煩的問題,http://www.csdn.net/develop/article/15/15971.shtm是一片好的文章,但是我還是建議初學(xué)者使用一些編輯工具,而不要像我這樣使用notepad好多天,這樣可以省掉好多關(guān)于classpath的煩惱。在這里我推薦eclipse,這是個比較好的工具(當(dāng)然在你不使用盜版的JBuilder等的情況下),同時完全免費(fèi)可以在www.eclipse.org下載。使用這一平臺可以隨心所欲的創(chuàng)建包,而不必關(guān)心環(huán)境變量的問題。但是它不能解決發(fā)布的問題。
我曾經(jīng)找到一個帖子,說把class打包成jar文件就可以讓用戶直接運(yùn)行,http://expert.csdn.net/Expert/topic/1995/1995651.xml?temp=.6288721可是我卻如何也運(yùn)行不起來,不過這個帖子也有很多幫助,可以讓我在這里不必多費(fèi)口舌向各位描述如何打包。當(dāng)然如果你和我一樣使用elipse就不用關(guān)心這個問題,記得在打包時選擇mainclass就可以了。
現(xiàn)在我們已經(jīng)知道如何打包了,這樣我們就有了一個jar文件名字就叫haha.jar,并且這個文件可以通過java -jar haha.jar運(yùn)行,這樣我們只需在寫一個bat文件就可以了。這個bat文件的內(nèi)容只有這么一句java -jar haha.jar。這樣我們就不必關(guān)心用戶的設(shè)置了。只要點(diǎn)擊bat文件就可以運(yùn)行你寫的程序了。
步驟總結(jié):
1、開發(fā)程序
2、打成jar的包
3、寫bat文件
4、把jar文件和bat文件放在一起壓縮成zip或者其他格式
5、放在網(wǎng)絡(luò)以供他人下載。
Java的普通應(yīng)用程序中,必須含有一個可被外界(通常是java解釋器)所直接調(diào)用的類,我們可以把這個類稱為該應(yīng)用程序的主類。
建立Java的應(yīng)用程序
1:main成員函數(shù)
Java的普通應(yīng)用程序中,必須含有一個可被外界(通常是java解釋器)所直接調(diào)用的類,我們可以把這個類稱為該應(yīng)用程序的主類,而這個主類必須含有main成員函數(shù),整個應(yīng)用程序就是從這個成員函數(shù)開始執(zhí)行的,這與C程序有一定的類似之處。
main成員函數(shù)的說明如下:
public static void main(String args[]);
2:命令行參數(shù)
我們把main成員函數(shù)的參數(shù)args稱為命令行參數(shù),args可以用來接收外界傳給Java應(yīng)用程序的參數(shù),下面我們舉一個例子來看看參數(shù)傳遞的具體過程:?
?? public class DrwRect
?? {
????? public static void main(String args[])
???? {
??????? class Rectangle
??????? {
??????????? int width,height,area;
??????????? public Rectangle(int w,int h)
??????????? {
???????????????? width=w;
???????????????? height=h;
???????????????? area=getArea(w,h);
??????????? }
??????????? protected int getArea(int w,int h)
??????????? {
???????????????? int a;
???????????????? a=w*h;
???????????????? return a;
??????????? }
??????????? public void drawRect()
??????????? {
???????????????? int i,j;
???????????????? for(i=width;i>0;i--)
?????????????????? System.out.print("#");
???????????????? System.out.print("") ;
???????????????? for(i=height-2;i>0;i--)
?????????????????? System.out.print("#");
???????????????? for(j=width-2;i>0;j--)
?????????????????? System.out.print("");
???????????????? System.out.print("#");
???????????????? for(i=width;i>0;i--)
?????????????????? System.out.print("#");
???????????????? System.out.print("");
??????????? }
??????? } //Rectangle
??????? int w=Integer.valueOf(args[0]).intValue();
??????? int h=Integer.valueOf(args[1]).intValue();
??????? Rectangle myrect=new Rectangle(w,h);
??????? myrect.drawRect();
???? }
?? }
用Javac編譯該程序后,可以用java解釋器來執(zhí)行它,具體過程如下:
javac doRect.java
java doRect 2 3
注意這里的“2 3”就是命令行參數(shù),它將被賦給DrwRect的main成員函數(shù)的args變量。其中args[0]的值為“2”,args[1]的值為“3”,Integer.valueOf(Stringstring).intValue的功能是把string中的數(shù)字轉(zhuǎn)化為一個整型值。