java为什么我会在这里遇到例外?
这是我的类的构造函数。使用以下代码:
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)
为什么会这样
# 1 楼答案
因为
jTextArea6
和jEditorPane1
正在由initComponents
初始化。在此之前您无法访问它们-它们为空。这就是为什么你会有例外# 2 楼答案
因为在initComponents()中;你可以安装 jTextArea6绝地武士团1
# 3 楼答案
如果看不到代码的其余部分(特别是
initComponents
的定义,加上字段的定义),就不可能100%确定但是几乎可以肯定的是,
initComponents()
方法设置了jTextArea6
和/或jEditorPane1
的值。在第二个示例中,您试图在设置这些字段之前取消对它们的引用;这意味着它们的默认值为null
,因此当您试图对它们调用方法时,会引发NullPointerException显然,一个解决办法是让事情保持原样,也许是加上一句评论
但更好的解决方案是让编译器为您检查这些内容。如果这两个字段从未更改(即,它们在构造函数中被一次性设置),那么您可以并且可以说应该声明它们
final
。除此之外,对于其他人来说,他们不必考虑这些字段改变的可能性,这意味着它们不会初始赋值,编译器不会让它们在被赋值之前取消引用。p># 4 楼答案
# 5 楼答案
在initcomponents中,这些对象是如何创建的?因此,它应该被称为第一
# 6 楼答案
很可能是因为方法
initComponents()
初始化变量jTextArea6
和/或jEditorPane1
。在初始化之前调用方法是抛出NullPointerException