快捷搜索:

Java进阶:编写跨平台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法度榜样的履历所得,信托对你的法度榜样设计会有所赞助。

您可能还会对下面的文章感兴趣: