跨平台Java程序设计的十二条规则

使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的,那么如何才能编写一个真正的跨平台的Java程序呢?下面是在编写跨平台的Java程序是需要注意的一些事情:

1.编写Java跨平台应用程序时,你可以选择JDK1.0,1.1,1.2或支持它们的GUI开发工具如:Jbuilder,Visual Age for Java 等等,但是必须注意你的Java程序只能使用Java核心API包,如果要使用第三方的类库包,则该类库包也要由Java核心包开发完成,否则在发布你的程序的时候还得将支持该Java类库包的JVM发布出去。也就是说,你的程序需要是100%纯Java的。举一个例子,Visual J++ 就不是纯Java的,由Visual J++编写的程序也就不具有平台无关性。

2.无论你使用的是JDK或其他开发工具,在编译时都要打开所有的警告选项,这样编译器可以尽可能多的发现平台相关的语句,并给出警告。虽然不能保证没有编译时警告错误的程序一定是跨平台的,但含有警告错误的程序却很有可能是非平台无关的。

3.在程序中使用任何一个方法的时候,要详细察看文档,确保你使用的方法不是在文档中已经申明为过时的方法(Deprecated method),也不是文档中未标明的隐含方法(Undocumented method)。

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的布局管理器(layout manager)来设置和管理可视组件的大小和位置,否则有可能造成布局混乱。

12.由于不同的操作系统,不同的机器,系统支持的颜色和屏幕的大小和分辨率都不同,如何获得这些属性呢?使用java.awt.Systemcolor类可以获得需要的颜色,如该类的inactiveCaption 就是窗口边框中活动标题的背景颜色,menu则是菜单的背景颜色。使用java.awt.Toolkit的getScreenResolution可以以“象素每英寸”为单位显示屏幕的分辨率。该类的getScreenSize可以得到屏幕大小(英寸),loadSystemColors可以列出所有的系统颜色。

这些注意事项有些是来自参考文献,有些是自己长期编写Java程序的经验所得,相信对你的程序设计会有所帮助。

时间: 2024-10-23 05:46:35

跨平台Java程序设计的十二条规则的相关文章

十二条假设,顶尖人物都在掌握的思维!

十二条假设,顶尖人物都在掌握的思维! 时间:2014-12-24 11:15 来源:MBA智库 作者:佚名 一.没有两个人是一样的(No two persons are the same.) 1.没有两个人的人生经验会完全一样,所以没有两个人的信念.价值观和规条系统会是一样. 2.因此没有两个人对同一件事的看法能够绝对一致. 3.因此没有两个人对同一件事的反应会是一样. 4.因此没有两个人的态度和行为模式会完全一样. 5.因此发生在一个人身上的事,不能假定发生在另一个人身上也会有一样的结果. 6

专家:安全使用云存储的十二条注意事项

本文讲的是专家:安全使用云存储的十二条注意事项,[IT168 资讯]通过一定的分析和用户反馈后,我们可以相信使用数据存储托管在线云存储会比使用私有存储平台的数据中心更加安全. Rebecca Wettemann, Nucleus 调查公司 •在你登录和注册前,要对取回你数据有多难做一个彻底的评估 •看一下是否有迁移数据的专用的工具软件 •要确定清除数据迁移是否需要单独收费 •看一下合同特殊条款中是否包括数据迁移 Henry Baltazar, 451 集团•要求增加一项条款,在合同结束的时候,可

ASP 三十二条精华代码

欢迎您访问我在博客园上的博客,上面有更多相关技术文章.我的博客地址是:http://www.cnblogs.com/scq2099yt. 欢迎您访问我在百度上的博客,上面有更多相关技术文章.我的博客地址是:http://hi.baidu.com/scq2099yt. 整理收藏: ASP 三十二条精华代码   1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu

风险投资的十二条潜规则

规则一:原来VC也讲等级 资本市场本身就是多层级的,投资机构和企业的位置泾渭分明.在智慧方面大基金与小基金没有必然的差别,就象卡车司机不一定比跑车司机技术高超一样. 两者的区别首先资金运规模,大项目私募时金额已经相当可观.IPO时更涉及数十亿计的股票承销.其次是成本,不同水准的基金运作成本天差地远,重量级不够的项目取得的投资收益根本无法覆盖大基金的成本.大型投资机构是摩根.凯雷.软银:中型的有联想投资等大陆.港台风投机构和刚刚进入中国试水的海外基金:小型基金多由海外证券机构或华人发起,对行业的专

十二条提升Ubuntu桌面体验的技巧和应用

大家都在说要从Windows移至Ubuntu.但是Linux用户的想法则不同.不管你想使用Ubuntu还是其他版本,事实都是Ubuntu能带来高效率的桌面.     本文将分享Datamation网站作者Matt Hartley使用Ubuntu的技巧,包括一些应用.     从桌面体验中获得更多:     Pithos:使用Pithos是在Ubuntu桌面用Pandora听音乐的最佳方式.它是个简单的有效的用户界面,不用与Flash和讨厌的广告打交道,让你轻松享受音乐带来的乐趣.     反观w

Java函数式编程(十二):监控文件修改_java

使用flatMap列出子目录 前面已经看到如何列出指定目录下的文件了.我们再来看下如何遍历指定目录的直接子目录(深度为1),先实现一个简单的版本,然后再用更方便的flatMap()方法来实现. 我们先用传统的for循环来遍历一个指定的目录.如果子目录中有文件,就添加到列表里:否则就把子目录添加到列表里.最后,打印出所有文件的总数.代码在下面--这个是困难模式的. 复制代码 代码如下: public static void listTheHardWay() {      List<File> f

Seoer成长需要重视的十二条建议

1.专注如一;虽说seoer不能算是什么远大的职业规划和理想抱负,但竟然选择了就应该专注,只有专注才有可能专业,也才能静下心来去研究每天变化的搜索引擎教程算法. 2.把事情做到极致;seo的最高境界就是无seo,这个意思不在与真的没有实施seo,而是把seo运用到了极致,不再让人看出只是改改标题,做做友情链接这么简单的工序.要达到这样的境界,需要我们seoer们更加的专注,并且不断的研究尝试. 3.少许诺.多兑现;了解seo的人都应该很清楚,搜索引擎变化是不以我们来决定的,所有做seo的只是为了

Symbian内存管理的二十二条军规

1.C类必须有析构函数,这是CBase的一个虚函数. 2.C类的构造函数和ConstructL()必须为protect或private类型的成员函数3.在C class中必须有一个NewLC()函数,除非它是嵌套类.NewL()是可选的,并且总是根据NewLC()来实现. 4.NewL()和NewLC()在c class中必须是static函数. 5.C类通过指针和引用来传递. 6.拷贝构造函数在symbian中没有用. 7.不一定要在析构函数中删除类的成员对象.(生命期结束即可删除) 8.析构

教你做梦都赚钱的十二条创业经验

1.当你有个好想法时,就应该立刻去做.不要听别人怎么说,只要你自己去尝试.去摸索,才会知道这个想法究竟有多好,即使失败了,也没有关系,因为你从中会学到很多东西.结果固然重要,更重要的是你去做了,在做的过程中学到了很多东西,这就是资本,就是财富. 2.业务员跑不成业务有2方面原因:一是市场环境的原因,另一个就是自己的原因.所以,好的业务员就是善于分析.善于总结和善于与客户打交道,以顾客的角度想问题.做事情.有一个前提,那就是勤奋,只要多用心.肯吃苦,业绩肯定会上去. 3.应该注意几点,就是:应该分