1

代码的目的:创建两个按钮(按钮 1 和按钮 2)。当用户单击 button1 时,更改 button2 的文本。当用户单击 button2 时,更改 button1 的文本。

这是我正在使用的代码:

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)如何追踪运行时错误?

4

5 回答 5

3

我相信你的框架对象是空的。它永远不会被初始化。您可以阅读运行时异常。它说multiAL.java:17

这意味着在第 17 行你得到你的 NullpointerException

于 2010-07-12T10:01:05.027 回答
2

但是在哪里

frame = new JFrame();

代码行?由于框架为空,我猜什么都不会发生...

于 2010-07-12T10:00:10.497 回答
2

frame未初始化,因此它解析为null并且您不能在null对象上调用方法。就像你初始化一样button1button2你也应该初始化frame.

frame = new JFrame();
于 2010-07-12T10:00:34.743 回答
1

首次使用前初始化帧:

frame = new JFrame();
于 2010-07-12T10:03:15.860 回答
0

考虑重命名您的类以遵循 Java 类名称约定:CamelCase ( http://en.wikipedia.org/wiki/CamelCase )

正如其他用户所指出的,问题是框架对象没有被初始化。

在第一次使用框架对象之前添加以下行:

frame = new JFrame();
frame.setSize(500,500);
于 2010-07-12T10:03:09.297 回答