运行多个Action事件时出现NullPointerException

运行多个Action事件时出现NullPointerException

问题描述:

代码的用途:创建两个按钮(button1和button2)。当用户单击按钮1时,更改按钮2的文本。当用户单击按钮2时,更改button1的文本。运行多个Action事件时出现NullPointerException

下面是我使用的代码:它编译完美

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class multiAL { 
JButton button1; 
JButton button2; 
JFrame frame; 
public static void main(String[] args) { 
    multiAL setterAL = new multiAL(); 
    setterAL.go(); 
} 

public void go() { 
    button1 = new JButton("Click me, I'm One"); 
    button2 = new JButton("Click me, I'm Two"); 
    frame.setSize(500,500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(BorderLayout.WEST, button1); 
    frame.getContentPane().add(BorderLayout.EAST, button2); 
    frame.setVisible(true); 
    button1.addActionListener(new b1L()); 
    button2.addActionListener(new b2L()); 
} 

class b1L implements ActionListener { 
    public void actionPerformed(ActionEvent event) { 
     button2.setText("What??, you clicked 1??"); 
    } 
} 

class b2L implements ActionListener { 
    public void actionPerformed(ActionEvent event) { 
     button1.setText("What??, you clicked 2??"); 
    } 
    } 
} 

,但是当我运行它,我收到以下错误:现在 Exception in thread "main" java.lang.NullPointerException at multiAL.go(multiAL.java:17) at multiAL.main(multiAL.java:11)

为止,我只遇到编译时错误。所以我想问两个问题:

1)代码有什么问题? 2)如何追踪运行时错误?

+0

文件名后的数字为您的实际行,其中错误顺便说一下,发生了。 – Gnoupi 2010-07-12 10:01:28

+1

请参见“命名规则” - http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html “类名应为名词,大小写一致,每个内部单词的首字母大写。尽量保持你的类名简单和描述性。使用整个单词 - 避免首字母缩略词和缩写。“ – 2010-07-12 10:05:44

+1

下次我会记住这一点。 – MoonStruckHorrors 2010-07-12 10:09:44

frame没有初始化,所以它解析为null,你不能调用null对象的方法。像你初始化button1button2你也应该初始化frame

frame = new JFrame(); 

但哪一个

frame = new JFrame(); 

行代码?由于框为空,什么都可能发生,我猜...

我相信你的框架对象为空。它从未初始化。您可以阅读运行时异常。它说multiAL.java:17

这意味着,在17行,你让你的NullPointerException

+0

这些错误会让我有一天被杀。 但仍然存在一个问题。从哪里开始数线? – MoonStruckHorrors 2010-07-12 10:05:22

+1

从文件的顶部 – 2010-07-12 10:06:34

+1

@MoonStruckHorrors,尝试使用像eclipse这样的IDE。日食向您显示行号。另外,stacktrace的一部分会变成超链接,因此您可以单击该例外并跳转到导致它的那一行。如果您使用命令行* nix卡住,请使用VIM并使用跳转至命令行。 '跳到第n行。例如,要跳转到第42行,您需要输入:42' – 2010-07-12 10:40:14

考虑重命名你的类遵循Java类名约定:驼峰(http://en.wikipedia.org/wiki/CamelCase

而对于这个问题,如指出其他用户,是框架对象未被初始化。

添加以下行之前,首先使用帧对象:

frame = new JFrame(); 
frame.setSize(500,500); 
+0

这与问题无关。下次使用评论。直到你无法避免使用答案作为评论,或者你的方式50代表将很长;-) – 2010-07-12 10:05:13

+0

谢谢,我是新来的。我会在下次做。 – Zheileman 2010-07-12 10:10:34

初始化框架的第一个使用前:

frame = new JFrame();