2009-03-29

由于Java版本不同导致程序莫名其妙的挂起问题

Posted in Java at 20:34 Author:仲远

标签:

Java版本发展速度很快,从几年前的JDK1.4,到现在的JDK1.6 Update13,基本上一两个月就会有一个新的JDK/JRE版本出来。不过,在公司里,似乎JDK1.4.2仍然占据很大一部分:因为这个版本被证明是十分稳定的。

因此,你可以会遇到这样的情况,在本地开发时,使用的是JDK1.6版开发的,而部署服务器上所使用的JDK版本确实1.4的。这样就会导致无法运行程序的错误。

不过,如果你十分小心的话,也许在本地开发的时候,虽然你的机器上已经安装了JDK1.6,不过可以在Eclipse中指定本项目使用JDK1.4来进行编译。通常情况下,这样部署到安装JDK1.4的服务器上运行程序,不会出现任何错误。但是有时候Eclipse并不一定会将所有的低版本下不兼容的方法检测出来,从而导致一些莫名其妙的错误,导致程序挂起。

例如,我最近就遇到了一个这样的问题:在使用Eclipse用JDK1.4进行编程时,需要添加一个Integer的对象,于是我使用了Integer.valueOf(int i)方法来构造一个Integer对象,结果Eclipse没有报任何错误。但是在部署到服务器上的时候,就会偶尔出现程序莫名其妙的挂起问题。由于这句代码不是每次都必然执行到,导致问题不可再现性,从而增加了跟踪的难度。不过最后,我还是发现了问题出现在这句代码上,于是查了一下手册,发现Integer.valueOf(int i)方法是从JDK1.5版本以后才开始支持的,因此在JDK1.4.2的服务器上,抛出了如下异常:

java.lang.NoSuchMethodError: java.lang.Integer.valueOf(I)Ljava/lang/Integer;

然后程序就不动了,也不往下执行,也不返回上一层。

之后,我将代码改为new Integer(int i)来构造这个Integer对象,程序就终于恢复正常,也不在出现莫名其妙的挂起错误了。

因此,如果你也遇到类似问题,建议你不妨检查一下你的JDK版本以及你所使用的一些方法是否兼容。

本文可以自由转载,转载时请保留全文并注明出处:
转载自仲子说 [ http://www.wangzhongyuan.com/ ]
原文链接:

2 Comments »

  1. Spirit said,

    2009年March30日 at 14:18

    Java的Documentation里的大多数方法都有since 1.x的记载。

  2. 我想想 said,

    2009年April1日 at 12:01

    我也遇到这样的问题,最后还是把其中一个卸载了

Leave a Comment

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word