沒有任何開發人員敢說自己開發的程序沒有問題,沒有任何人敢說自己在開發過程中不會遇到問題。遇到問題時,通常都會根據日志中的異常、錯誤或者提示信息來Debug,修復問題。
當然了,一些常見的問題,還是需要總結一下了,再次遇到這樣的問題時,就知道怎么處理它,下面就列出一些開發過程中會遇到的問題。
NullPonitException
這個異??梢哉f是最為常見的異常了。當遇到這個問題時,大多數情況都是因為沒有對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時,會有隨機端口的使用。
新聞熱點
疑難解答