当前位置: 技术问答>java相关
請分析NullPointerException的產生原因?(付程序)
来源: 互联网 发布时间:2015-04-16
本文导语: 請深入分析一下其中的原因?謝謝 --------------------------------------------- import java.awt.*; import java.awt.event.*; class ButtonHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ System.exit(0); } } public class TestButton...
請深入分析一下其中的原因?謝謝
---------------------------------------------
import java.awt.*;
import java.awt.event.*;
class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public class TestButton{
private Frame f;
private Button b;
public TestButton(){
Frame f=new Frame("Test");
Button b=new Button("Press me");
b.addActionListener(new ButtonHandler());
f.add(b,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
public void launchFrame(){
}
public static void main(String []args){
TestButton guiApp=new TestButton();
//guiApp.launchFrame();
}
}//運行成功
-----------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public class TestButton{
private Frame f;
private Button b;
public TestButton(){
Frame f=new Frame("Test");
Button b=new Button("Press me");
}
public void launchFrame(){
b.addActionListener(new ButtonHandler());
f.add(b,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
public static void main(String []args){
TestButton guiApp=new TestButton();
guiApp.launchFrame();
}
}
/**Exception in thread "main" java.lang.NullPointerException
at TestButton.launchFrame(TestButton.java:18)
at TestButton.main(TestButton.java:25)
*/
---------------------------------------------
import java.awt.*;
import java.awt.event.*;
class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public class TestButton{
private Frame f;
private Button b;
public TestButton(){
Frame f=new Frame("Test");
Button b=new Button("Press me");
b.addActionListener(new ButtonHandler());
f.add(b,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
public void launchFrame(){
}
public static void main(String []args){
TestButton guiApp=new TestButton();
//guiApp.launchFrame();
}
}//運行成功
-----------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
public class TestButton{
private Frame f;
private Button b;
public TestButton(){
Frame f=new Frame("Test");
Button b=new Button("Press me");
}
public void launchFrame(){
b.addActionListener(new ButtonHandler());
f.add(b,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
public static void main(String []args){
TestButton guiApp=new TestButton();
guiApp.launchFrame();
}
}
/**Exception in thread "main" java.lang.NullPointerException
at TestButton.launchFrame(TestButton.java:18)
at TestButton.main(TestButton.java:25)
*/
|
因为你原来的写法,是在构造函数中定义并创建的f,b。
不会连变量定义与赋值都忘了吧?
你定义的private Frame f and Button b,并未在构造函数里用到,也就是没有为它们创建对象。
在构造函数中,你又定义了一个新的f,并且初始化了。
而你创建的f,b只适用于TestButton()本身,是局部的,并且覆盖全局的f与b。
不会连变量定义与赋值都忘了吧?
你定义的private Frame f and Button b,并未在构造函数里用到,也就是没有为它们创建对象。
在构造函数中,你又定义了一个新的f,并且初始化了。
而你创建的f,b只适用于TestButton()本身,是局部的,并且覆盖全局的f与b。
|
呵呵, 在 TestButton 中定义的 Frame f 和 Button b 和在构造
函数中的不是一个.
函数中的不是一个.
|
Frame f 和 Button b
把F 和 B 的初始化拿到构造函数外面来
把F 和 B 的初始化拿到构造函数外面来