没有任何开发人员敢说自己开发的程序没有问题,没有任何人敢说自己在开发过程中不会遇到问题。遇到问题时,通常都会根据日志中的异常、错误或者提示信息来Debug,修复问题。
当然了,一些常见的问题,还是需要总结一下了,再次遇到这样的问题时,就知道怎么处理它,下面就列出一些开发过程中会遇到的问题。
NullPonitException
这个异常可以说是最为常见的异常了。当遇到这个问题时,大多数情况都是因为没有对null值判断引起的,对于这种情况,都要加上空值的处理。
但是我们在查问题时,不能仅局限于空值的处理,更要调查数据为什么是空的,这一点很重要。我处理过这样一个问题,在Console访问JMS资源时出现在NullPointException,调查时发现取得的数据是null。但实际情况下,这个值是不应为null。这就说明有其它的潜在的问题存在了。
java class 从加载到使用有下列过程 :加载、连接(检验、准备、解析)、初始化。
ClassNotFoundException
这个类也是比较好理解的。但是找问题的原因并不轻松的。如果想要轻松的找出这个问题的原因,需要对ClassLoader的知识有所了解。这个错误发生在类的加载时,通过类的字符串名称加载时,并且是从ClassLoader的搜索下查找类的。
出现这个问题时,可能有下列原因:
1) 搜索路径下,应该有某个类或者某个jar,但却没有。
2) 搜索路径错误,这个对应的就是ClassLoader使用错误或者ClassLoader的搜索路径设置不正确。
3)对于使用了OSGi的应用,搜索路径下有这个类,但却找不到,就要从MANFIST文件中查这个类所在的包是否在export-package中。
UnsupportedClassVersionError
class文件中会有编译时使用的JDK的版本号,JDK是向后兼容的,也就是说jdk6上编译的class文件可以在JDK7、JDK8...上运行。
这个Error出现连接阶段的检验过程中。另外当检验的过程中,发现当前的JDK版本(主版本、小版本)低于编译时使用的版本,就会报这个错误。
出现这个错误一般有两种解决方案:
1)如果要求一定要在当前JDK版本上运行的话,就重新对项目使用当前版本的JDK编译打包。
2)如果对运行时使用的JDK版本没有要求的话,可以换用高版本的JDK。
java.net.ConnectException: Connection refused
这个错误出现,可能是下面几种情况:
1)ip不对 或者(和)port不对 ; 2)指定Ip上的port没有被监听。
java.net.ConnectException Connection time out
这个错误,目前见过两种情况:
1)配置了防火墙。
2)没有配置防火墙时,Web请求长时间没有得到处理,一直在请求wait queue中,导致Client(web broswer)Close了连接。
java.net.BindException:Address already in use : JVM_Bind
端口占用了。这个要搞清是被谁占用了。
如果是被其它程序占用了,是否需要修改端口。
如果是被程序本身运行过程占用了,就要想办法解决这个问题。
在使用JMX时,会有随机端口的使用。
新闻热点
疑难解答