这是我班级的构造者。使用以下代码:
public tester {
setTitle("tester");
initComponents();
jTextArea6.setEditable(false);
jEditorPane1.setEditable(false);
}
一切都很好。但是使用此代码,
public tester() {
setTitle("tester");
jTextArea6.setEditable(false);
jEditorPane1.setEditable(false);
initComponents();
}
我得到以下例外情况:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at tester.tester.<init>(tester.java:31)
at tester.tester$35.run(tester.java:1389)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:660)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
为什么会这样?
答案 0 :(得分:7)
如果没有看到其余代码(特别是initComponents
的定义,加上字段的定义),就不可能100%确定。
但initComponents()
方法几乎肯定会设置jTextArea6
和/或jEditorPane1
的值。在第二个示例中,您尝试在设置之前取消引用这些字段;这意味着它们的默认值为null
,因此当您尝试在它们上调用方法时会导致抛出NullPointerException。
显然,一个解决办法就是保留原样,也许还有一条评论说明
// Note - this method call initialises the fields. DO NOT REORDER!!!
但更好的解决方案是让编译器为您检查这些内容。如果两个字段都没有改变(即它们在构造函数中被一次性设置),那么你可以并且可以说它们应该声明它们final
。除了这一点之外,他们非常清楚他们不必考虑这些字段发生变化的可能性,这意味着他们不会在最初分配默认值,并且编译器不会让你在它们出现之前取消引用它们被分配了。
答案 1 :(得分:4)
由jTextArea6
初始化jEditorPane1
和initComponents
。在此之前您无法访问它们 - 它们为空。这就是你得到例外的原因。
答案 2 :(得分:0)
在initcomponents中创建了这些对象?因此,应首先调用它?
答案 3 :(得分:0)
因为在initComponents()中;你设置了jTextArea 6 jEditorPane 1
的对象答案 4 :(得分:0)
public tester() {
setTitle("tester");
jTextArea6.setEditable(false); //jTextArea6 might be null
jEditorPane1.setEditable(false); //jEditorPane1 might be null
initComponents(); //I assume you're creating your components here, thus jTextArea6 and jEditorPane1 would be non-null after this line only
}
答案 5 :(得分:0)
很可能因为方法initComponents()
初始化变量jTextArea6
和/或jEditorPane1
。在初始化之前调用方法是抛出NullPointerException