这是我的托管 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
最佳答案
通过排除过程,问题的发生是因为 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 行 - 因为
res
和pieModel
必须为非空。 - 它不能是第 12 行 - 因为那里没有任何内容可以返回
null
。
因此它只能发生在第6行。
关于java - JSF 中无法实例化类错误,由 NullPointerException 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507752/