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ます。その行で例外が発生したことを簡単に確認できるはずです (行番号をチェックすること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. }
  • コンストラクターで NPE がスローされるため、行 3 にすることはできません。
  • 4行目はあり得ない
  • 5 行目は使用できません - 3 行目を参照してください
  • 6行目かもしれません
  • 7行目ではありません-nullではstrない必要があるためです(そこまで到達した場合)
  • 8行目ではありません-executeQuery決して返されないためですnull
  • andは非 nullresでなければならないため、9 行目は指定できません。pieModel
  • 12 行目ではありませんnull

したがって、 6行目でのみ発生する可能性があります。

于 2012-11-22T08:11:48.087 に答える