Java 为什么我会在这里得到例外?
这是我的类的构造函数。使用以下代码:Java 为什么我会在这里得到例外?,java,Java,这是我的类的构造函数。使用以下代码: public tester { setTitle("tester"); initComponents(); jTextArea6.setEditable(false); jEditorPane1.setEditable(false); } 一切都很好。但是有了这个代码 public tester() { setTitle("tester"); jTextArea6.setEditable(false);
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)
线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常
tester.tester.(tester.java:31)
tester.tester$35.run(tester.java:1389)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:660)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:128)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:117)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
为什么会这样 如果没有看到代码的其余部分(特别是
initComponents
的定义,加上字段的定义),就不可能100%确定
但几乎可以肯定的是,initComponents()
方法设置jtextraea6
和/或jEditorPane1
的值。在第二个示例中,您试图在设置这些字段之前取消对它们的引用;这意味着它们的默认值为null
,因此当您尝试对它们调用方法时,会引发NullPointerException
显然,一个解决办法是让事情保持原样,也许是加上一句评论
// Note - this method call initialises the fields. DO NOT REORDER!!!
但更好的解决方案是让编译器为您检查这些内容。如果这两个字段从未更改(即,它们在构造函数中被一次性设置),那么您可以并且应该声明它们为
final
。除此之外,对于其他人来说,他们不必考虑这些字段改变的可能性,这意味着它们将不会有最初分配的默认值,编译器不会让它们在被赋值之前对它们进行解引用。因此,应该首先调用它?,因为在initComponents()中;您可以安装的对象
jTextArea6绝地武士盘1因为
jTextArea6
和绝地武士盘1
正在由initComponents
初始化。在此之前您无法访问它们-它们为空。这就是为什么会出现异常。很可能是因为方法initComponents()
初始化变量jTextArea6
和/或jEditorPane1
。初始化之前调用方法是抛出<代码> Null PoExtExeals< /Calp>也许您正在尝试设置不存在的Advice(false)对象?为了更好的清晰,请考虑发布一个。如果这个问题已经这样做了,回答的人就不必急于下结论。我的程序使用netbeans。它会自动放置init methid。init实际上做什么?
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
}