使用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程序的经验所得相信对你的程序设计会有所帮助