| 導購 | 订阅 | 在线投稿
分享
 
 
 

Java進階:編寫跨平台Java程序注意事項

來源:互聯網網民  2008-06-01 03:18:19  評論

使用Java語言編寫應用程序最大的優點在于「一次編譯,處處運行」,然而這並不是說所有的Java程序都具有跨平台的特性,事實上,相當一部分的Java程序是不能在別的操作系統上正確運行的,那麽如何才能編寫一個真正的跨平台的Java程序呢?下面是在編寫跨平台的Java程序是需要注意的一些事情:

1.編寫Java跨平台應用程序時,你可以選擇JDK1.0,1.1,1.2或支持它們的GUI開發工具如:Jbuilder,VisualAgeforJava等等,但是必須注意你的Java程序只能使用Java核心API包,如果要使用第三方的類庫包,則該類庫包也要由Java核心包開發完成,否則在發布你的程序的時候還得將支持該Java類庫包的JVM發布出去。也就是說,你的程序需要是100%純Java的。舉一個例子,VisualJ++就不是純Java的,由VisualJ++編寫的程序也就不具有平台無關性。

2.無論你使用的是JDK或其他開發工具,在編譯時都要打開所有的警告選項,這樣編譯器可以盡可能多的發現平台相關的語句,並給出警告。雖然不能保證沒有編譯時警告錯誤的程序一定是跨平台的,但含有警告錯誤的程序卻很有可能是非平台無關的。

3.在程序中使用任何一個方法的時候,要詳細察看文檔,確保你使用的方法不是在文檔中已經申明爲過時的方法(Deprecatedmethod),也不是文檔中未標明的隱含方法(Undocumentedmethod)。

4.退出Java程序時盡量不要使用java.lang.System的exit方法。Exit方法可以終止JVM,從而終止程序,但如果同時運行了另一個Java程序,使用exit方法就會讓該程序也關閉,這顯然不是我們希望看到的情況。事實上要退出Java程序,可以使用destory()退出一個獨立運行的過程。對于多線程程序,必須要關閉各個非守護線程。只有在程序非正常退出時,才使用exit方法退出程序。

5.避免使用本地方法和本地代碼,盡可能自己編寫具有相應功能的Java類,改寫該方法。如果一定要使用該本地方法,可以編寫一個服務器程序調用該方法,然後將現在要編寫的程序作爲該服務器程序的客戶程序,或者考慮CORBA(公共對象請求代理)程序結構。

6.Java中有一個類似于Delphi中的winexec的方法,java.lang.runtime類的exec方法,作爲該方法本身是具有平台無關性的,但是給方法所調用的命令及命令參數卻是與平台相關的,因此,在編寫程序時要避免使用,如果一定要調用其他的程序的話,必須要讓用戶自己來設置該命令及其參數。比如說,在windows中可以調用notepad.exe程序,在linux中就要調用vi程序了。

7.程序設計中的所有的信息都要使用ASCII碼字符集,因爲並不是所有的操作系統都支持Unicode字符集,這對于跨平台的Java中文軟件程序不能不說是一大噩耗。

8.在程序中不要硬性編碼與平台相關的任何常量,比如行分隔符,文件分隔符,路徑分隔符等等,這些常量在不同的平台上是不同的,比如文件分隔符,在UNIX和MAC中是「/」,在windows中是「\」,如果要使用這些常量,需要使用jdava.util.Properties類的getProperty方法,如java.util.Properties.getProperty(「file.separator」)可以獲得文件分隔符,getProperty(「line.separator」)返回行分隔符,getProperty(「path.separator」)返回路徑分隔符。

9.在編寫跨平台的網絡程序時,不要使用java.net.InetAddress類的getHostName方法得到主機名,因爲不同的平台的主機名格式是不同的,最好使用getAddress得到格式相同的IP地址,另外,程序中所有的主機名都要換成IP地址,比如www.263.net就要換成相應的IP地址。

10.涉及文件操作的程序需要注意:不要在程序中硬性編碼文件路徑,理由和8中一樣,只是這一點特別重要,因此單獨提出。而且,不同平台對于文件名使用的字符及最大文件名長度的要求不同,編寫你的程序的時候要使用一般的ASCII碼字符作爲文件的名字,而且不能與平台中已存在的程序同名,否則會造成沖突。

11.如果您寫的程序是GUI程序,在使用AWT組件時不能硬性設置組件的大小和位置而應該使用Java的布局管理器(layoutmanager)來設置和管理可視組件的大小和位置,否則有可能造成布局混亂。

12.由于不同的操作系統,不同的機器,系統支持的顔色和屏幕的大小和分辨率都不同,如何獲得這些屬性呢?使用java.awt.Systemcolor類可以獲得需要的顔色,如該類的inactiveCaption就是窗口邊框中活動標題的背景顔色,menu則是菜單的背景顔色。使用java.awt.Toolkit的getScreenResolution可以以「象素每英寸」爲單位顯示屏幕的分辨率。該類的getScreenSize可以得到屏幕大小(英寸),loadSystemColors可以列出所有的系統顔色。

這些注意事項有些是來自參考文獻,有些是自己長期編寫Java程序的經驗所得,相信對你的程序設計會有所幫助。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
使用Java語言編寫應用程序最大的優點在于「一次編譯,處處運行」,然而這並不是說所有的Java程序都具有跨平台的特性,事實上,相當一部分的Java程序是不能在別的操作系統上正確運行的,那麽如何才能編寫一個真正的跨平台的Java程序呢?下面是在編寫跨平台的Java程序是需要注意的一些事情: 1.編寫Java跨平台應用程序時,你可以選擇JDK1.0,1.1,1.2或支持它們的GUI開發工具如:Jbuilder,VisualAgeforJava等等,但是必須注意你的Java程序只能使用Java核心API包,如果要使用第三方的類庫包,則該類庫包也要由Java核心包開發完成,否則在發布你的程序的時候還得將支持該Java類庫包的JVM發布出去。也就是說,你的程序需要是100%純Java的。舉一個例子,VisualJ++就不是純Java的,由VisualJ++編寫的程序也就不具有平台無關性。 2.無論你使用的是JDK或其他開發工具,在編譯時都要打開所有的警告選項,這樣編譯器可以盡可能多的發現平台相關的語句,並給出警告。雖然不能保證沒有編譯時警告錯誤的程序一定是跨平台的,但含有警告錯誤的程序卻很有可能是非平台無關的。 3.在程序中使用任何一個方法的時候,要詳細察看文檔,確保你使用的方法不是在文檔中已經申明爲過時的方法(Deprecatedmethod),也不是文檔中未標明的隱含方法(Undocumentedmethod)。 4.退出Java程序時盡量不要使用java.lang.System的exit方法。Exit方法可以終止JVM,從而終止程序,但如果同時運行了另一個Java程序,使用exit方法就會讓該程序也關閉,這顯然不是我們希望看到的情況。事實上要退出Java程序,可以使用destory()退出一個獨立運行的過程。對于多線程程序,必須要關閉各個非守護線程。只有在程序非正常退出時,才使用exit方法退出程序。 5.避免使用本地方法和本地代碼,盡可能自己編寫具有相應功能的Java類,改寫該方法。如果一定要使用該本地方法,可以編寫一個服務器程序調用該方法,然後將現在要編寫的程序作爲該服務器程序的客戶程序,或者考慮CORBA(公共對象請求代理)程序結構。 6.Java中有一個類似于Delphi中的winexec的方法,java.lang.runtime類的exec方法,作爲該方法本身是具有平台無關性的,但是給方法所調用的命令及命令參數卻是與平台相關的,因此,在編寫程序時要避免使用,如果一定要調用其他的程序的話,必須要讓用戶自己來設置該命令及其參數。比如說,在windows中可以調用notepad.exe程序,在linux中就要調用vi程序了。 7.程序設計中的所有的信息都要使用ASCII碼字符集,因爲並不是所有的操作系統都支持Unicode字符集,這對于跨平台的Java中文軟件程序不能不說是一大噩耗。 8.在程序中不要硬性編碼與平台相關的任何常量,比如行分隔符,文件分隔符,路徑分隔符等等,這些常量在不同的平台上是不同的,比如文件分隔符,在UNIX和MAC中是「/」,在windows中是「\」,如果要使用這些常量,需要使用jdava.util.Properties類的getProperty方法,如java.util.Properties.getProperty(「file.separator」)可以獲得文件分隔符,getProperty(「line.separator」)返回行分隔符,getProperty(「path.separator」)返回路徑分隔符。 9.在編寫跨平台的網絡程序時,不要使用java.net.InetAddress類的getHostName方法得到主機名,因爲不同的平台的主機名格式是不同的,最好使用getAddress得到格式相同的IP地址,另外,程序中所有的主機名都要換成IP地址,比如www.263.net就要換成相應的IP地址。 10.涉及文件操作的程序需要注意:不要在程序中硬性編碼文件路徑,理由和8中一樣,只是這一點特別重要,因此單獨提出。而且,不同平台對于文件名使用的字符及最大文件名長度的要求不同,編寫你的程序的時候要使用一般的ASCII碼字符作爲文件的名字,而且不能與平台中已存在的程序同名,否則會造成沖突。 11.如果您寫的程序是GUI程序,在使用AWT組件時不能硬性設置組件的大小和位置而應該使用Java的布局管理器(layoutmanager)來設置和管理可視組件的大小和位置,否則有可能造成布局混亂。 12.由于不同的操作系統,不同的機器,系統支持的顔色和屏幕的大小和分辨率都不同,如何獲得這些屬性呢?使用java.awt.Systemcolor類可以獲得需要的顔色,如該類的inactiveCaption就是窗口邊框中活動標題的背景顔色,menu則是菜單的背景顔色。使用java.awt.Toolkit的getScreenResolution可以以「象素每英寸」爲單位顯示屏幕的分辨率。該類的getScreenSize可以得到屏幕大小(英寸),loadSystemColors可以列出所有的系統顔色。 這些注意事項有些是來自參考文獻,有些是自己長期編寫Java程序的經驗所得,相信對你的程序設計會有所幫助。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有