无法在JSF中实例化类错误,由NullPointerException引起

时间:2012-11-22 07:31:02

标签: java jsf primefaces

这是我的托管Bean类,

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);
        }
    } 
}

但问题是当它被编译时会产生类似“Cant instantiate class:org.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

1 个答案:

答案 0 :(得分:2)

通过消除过程,问题正在发生,因为conn.getConn()正在返回null。您应该能够确认该行发生异常(通过检查行号!),我们知道conn不能是null,因此它必须是{{1}的结果那是getConn()

在我不知道null类是什么以及它的Connector方法如何工作的情况下,这就是我可以去的。


为了记录,这是我如何消除其他可能性。

NPE正在被getConn()召唤......而不是从createPieModel调来的某种方法:

createPieModel
  • 它不能是第3行,因为任何NPE都会在构造函数中抛出。
  • 不能是第4行
  • 不能是第5行 - 见第3行
  • 可能是第6行
  • 它不能是第7行 - 因为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. } 必须是非空的(如果我们那么远)
  • 它不能是第8行 - 因为str永远不会返回executeQuery
  • 不能是第9行 - 因为nullres必须为非空。
  • 它不能是第12行 - 因为没有任何内容可以返回pieModel

因此它只能 在第6行发生。