使用Java語言編寫應用程序最大的優點在於一次編譯處處運行然而這並不是說所有的Java程序都具有跨平台的特性事實上相當一部分的Java程序是不能在別的操作系統上正確運行的那麼如何才能編寫一個真正的跨平台的Java程序呢?下面是在編寫跨平台的Java程序是需要注意的一些事情
編寫Java跨平台應用程序時你可以選擇JDK或支持它們的GUI開發工具如JbuilderVisualAgeforJava等等但是必須注意你的Java程序只能使用Java核心API包如果要使用第三方的類庫包則該類庫包也要由Java核心包開發完成否則在發布你的程序的時候還得將支持該Java類庫包的JVM發布出去也就是說你的程序需要是%純Java的舉一個例子VisualJ++就不是純Java的由VisualJ++編寫的程序也就不具有平台無關性
無論你使用的是JDK或其他開發工具在編譯時都要打開所有的警告選項這樣編譯器可以盡可能多的發現平台相關的語句並給出警告雖然不能保證沒有編譯時警告錯誤的程序一定是跨平台的但含有警告錯誤的程序卻很有可能是非平台無關的
在程序中使用任何一個方法的時候要詳細察看文檔確保你使用的方法不是在文檔中已經申明為過時的方法(Deprecatedmethod)也不是文檔中未標明的隱含方法(Undocumentedmethod)
退出Java程序時盡量不要使用javalangSystem的exit方法Exit方法可以終止JVM從而終止程序但如果同時運行了另一個Java程序使用exit方法就會讓該程序也關閉這顯然不是我們希望看到的情況事實上要退出Java程序可以使用destory()退出一個獨立運行的過程對於多線程程序必須要關閉各個非守護線程只有在程序非正常退出時才使用exit方法退出程序
避免使用本地方法和本地代碼盡可能自己編寫具有相應功能的Java類改寫該方法如果一定要使用該本地方法可以編寫一個服務器程序調用該方法然後將現在要編寫的程序作為該服務器程序的客戶程序或者考慮CORBA(公共對象請求代理)程序結構
Java中有一個類似於Delphi中的winexec的方法javalangruntime類的exec方法作為該方法本身是具有平台無關性的但是給方法所調用的命令及命令參數卻是與平台相關的因此在編寫程序時要避免使用如果一定要調用其他的程序的話必須要讓用戶自己來設置該命令及其參數比如說在windows中可以調用notepadexe程序在linux中就要調用vi程序了
程序設計中的所有的信息都要使用ASCII碼字符集因為並不是所有的操作系統都支持Unicode字符集這對於跨平台的Java中文軟件程序不能不說是一大噩耗
在程序中不要硬性編碼與平台相關的任何常量比如行分隔符文件分隔符路徑分隔符等等這些常量在不同的平台上是不同的比如文件分隔符在UNIX和MAC中是/在windows中是\如果要使用這些常量需要使用jdavautilProperties類的getProperty方法如javautilPropertiesgetProperty(fileseparator)可以獲得文件分隔符getProperty(lineseparator)返回行分隔符getProperty(pathseparator)返回路徑分隔符
在編寫跨平台的網絡程序時不要使用javanetInetAddress類的getHostName方法得到主機名因為不同的平台的主機名格式是不同的最好使用getAddress得到格式相同的IP地址另外程序中所有的主機名都要換成IP地址比如wwwnet就要換成相應的IP地址
涉及文件操作的程序需要注意不要在程序中硬性編碼文件路徑理由和中一樣只是這一點特別重要因此單獨提出而且不同平台對於文件名使用的字符及最大文件名長度的要求不同編寫你的程序的時候要使用一般的ASCII碼字符作為文件的名字而且不能與平台中已存在的程序同名否則會造成沖突
如果您寫的程序是GUI程序在使用AWT組件時不能硬性設置組件的大小和位置而應該使用Java的布局管理器(layoutmanager)來設置和管理可視組件的大小和位置否則有可能造成布局混亂
由於不同的操作系統不同的機器系統支持的顏色和屏幕的大小和分辨率都不同如何獲得這些屬性呢?使用javaawtSystemcolor類可以獲得需要的顏色如該類的inactiveCaption就是窗口邊框中活動標題的背景顏色menu則是菜單的背景顏色使用javaawtToolkit的getScreenResolution可以以象素每英寸為單位顯示屏幕的分辨率該類的getScreenSize可以得到屏幕大小(英寸)loadSystemColors可以列出所有的系統顏色
這些注意事項有些是來自參考文獻有些是自己長期編寫Java程序的經驗所得相信對你的程序設計會有所幫助
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27219.html