2012-11-22 40 views
1

這裏是我的管理Bean類,無法實例類錯誤JSF,引起NullPointerException異常

public class ChartBean implements Serializable { 

    private PieChartModel pieModel; 

    public ChartBean(){ 
     createPieModel(); 
    } 

    public PieChartModel getPieModel() { 
     return pieModel; 
    } 

    private void createPieModel(){ 
     try { 
      pieModel = new PieChartModel(); 

      String query = "SELECT b.countryname,count(b.countryname) FROM info.summery a,info.countrymcc b;"; 
      Connector conn = new Connector(); 
      Statement str = (Statement) conn.getConn().createStatement(); 
      ResultSet res = str.executeQuery(query); 


      while(res.next()){ 

        pieModel.set(res.getString(1), Integer.parseInt(res.getString(2))); 
      } 
     } catch (SQLException ex) { 
      Logger.getLogger(ChartBean.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

但問題是,當它被編譯它給這樣的「廣東話實例化類錯誤:組織。 primefaces.examples.view.ChartBean」。是什麼原因??

堆棧跟蹤:

Caused by: java.lang.NullPointerException at 

org.primefaces.examples.view.ChartBean.createPieModel(ChartBean.java:45) at  
org.primefaces.examples.view.ChartBean.<init>(ChartBean.java:32) at  
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at  
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorI‌​  
mpl.java:39) at  
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorA‌​  
ccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at  
java.lang.Class.newInstance0(Class.java:355) at java.lang.Class 
+0

嘗試在構造函數中沒有盡全力。從構造函數中刪除對createPieModel()的調用,並使用@PostConstruct對createPieModel()進行註釋 –

+0

我會嘗試一下,然後給出這樣的錯誤:「在託管bean chartBean上執行資源注入時發生錯誤」。 – user1705260

+0

爲什麼不使用ORM模型,即使使用JPA或Hibernate等Java EE? – Lion

回答

2

通過排除法,這個問題正在發生,因爲conn.getConn()將返回null。您應該能夠簡單地確認該行出現異常(通過檢查行號!),並且我們知道conn不能是null,因此它必須是getConn()的結果,即null

這就像我不知道什麼是Connector類以及它的getConn()方法如何工作一樣。


爲了記錄在案,這裏是我如何消除其他可能性。

的NPE被拋出在createPieModel電話...而不是從一些所謂createPieModel方法:

1. private void createPieModel(){ 
2.  try { 
3.   pieModel = new PieChartModel(); 
4.   String query = "SELECT b.countryname,count(b.countryname) FROM info.summery a,info.countrymcc b;"; 
5.   Connector conn = new Connector(); 
6.   Statement str = (Statement) conn.getConn().createStatement(); 
7.   ResultSet res = str.executeQuery(query); 
8.   while(res.next()){ 
9.    pieModel.set(res.getString(1), Integer.parseInt(res.getString(2))); 
10.  } 
11. } catch (SQLException ex) { 
12.  Logger.getLogger(ChartBean.class.getName()).log(Level.SEVERE, null, ex); 
13. } 
14. } 
  • 它不能是3號線,因爲任何NPE會在構造函數中拋出。
  • 它不可能是4號線
  • 它不可能是5號線 - 見線3
  • 可能是6號線
  • 它不能是7號線 - 因爲str必須爲非空(如果我們得到遠)
  • 它不能是8號線 - 因爲executeQuery永遠不會返回null
  • 它不能是9行 - 因爲respieModel必須爲非空。
  • 它不能是第12行 - 因爲沒有東西可以返回null

因此,它可以發生第6行

+0

我不確定什麼是返回conn.getConn()。但是,如果它正在創建數據庫連接,那麼Exception應該是'SQLException',而不是'nullPointerException'。 我同意你的看法,conn中發生了異常。getConn()',也許OP應該修改他的代碼。 – jmrodrigg

+0

非常感謝。我明白了這一點,並解決了我的問題。再次感謝你.. – user1705260

相關問題