1

这是我的托管 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);
        }
    } 
}

但问题是,当它被编译时,它会给出这样的错误“无法实例化类: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
4

1 回答 1

2

通过消除过程,问题正在发生,因为conn.getConn()正在返回null。您应该能够简单地确认异常发生在该行(通过检查行号!),并且我们知道 that conncannot be null,所以它必须是getConn()that is的结果null

在不知道Connector类是什么以及它的getConn()方法是如何工作的情况下,这就是我所能做到的。


作为记录,这是我消除其他可能性的方法。

NPE 在调用中被抛出createPieModel......而不是在某些方法中调用 from 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 行 - 因为resandpieModel必须是非空的。
  • 它不能是第 12 行 - 因为那里没有任何东西可以返回 a null

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

于 2012-11-22T08:11:48.087 回答