Java 运行多个操作事件时出现NullPointerException

Java 运行多个操作事件时出现NullPointerException,java,swing,nullpointerexception,runtime-error,Java,Swing,Nullpointerexception,Runtime Error,代码的目的:创建两个按钮(按钮1和按钮2)。当用户单击按钮1时,更改按钮2的文本。当用户单击按钮2时,更改按钮1的文本 以下是我使用的代码: 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) {

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

以下是我使用的代码:

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??");
    }
  }
}
它可以完美地编译,但当我运行它时,会收到以下错误: 线程“main”java.lang.NullPointerException中的异常 在multiAL.go(multiAL.java:17) 在multiAL.main(multiAL.java:11)

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

1) 代码怎么了? 2) 如何追踪运行时错误?

但问题在哪里

frame = new JFrame();
代码行?因为帧是空的,所以什么也不会发生,我猜…

但是帧在哪里

frame = new JFrame();

代码行?因为frame为null,所以什么也不会发生,我猜…

frame
没有初始化,所以它解析为
null
,并且不能对
null
对象调用方法。与初始化
button1
button2
一样,您也应该初始化
frame

frame = new JFrame();

frame
未初始化,因此它解析为
null
,并且您不能对
null
对象调用方法。与初始化
button1
button2
一样,您也应该初始化
frame

frame = new JFrame();

我相信你的帧对象是空的。它从不初始化。您可以读取运行时异常。上面写着
multiAL.java:17


这意味着在第17行中,您得到了NullpointerException,我相信您的帧对象是空的。它从不初始化。您可以读取运行时异常。上面写着
multiAL.java:17


这意味着在第17行中,您得到了NullpointerException,请考虑重命名您的类以遵循Java类名约定:CamelCase()

正如其他用户所指出的,问题在于帧对象没有被初始化

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

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

考虑重命名类以遵循Java类名约定:CamelCase()

正如其他用户所指出的,问题在于帧对象没有被初始化

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

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

在首次使用之前初始化帧:

frame = new JFrame();

在首次使用之前初始化帧:

frame = new JFrame();

顺便说一句,文件名后的数字给出了发生错误的实际行。请参阅“命名规则”-“类名应该是名词,大小写混合,每个内部单词的第一个字母大写。尽量保持类名的简单性和描述性。使用全字避免首字母缩写和缩写。”下次我会记住这一点。顺便说一下,文件名后的数字给出了发生错误的实际行。请参阅“命名规则”——类名应该是名词,大小写混合,每个内部单词的第一个字母大写。尽量保持你的类名简单和描述性。使用完整的单词,避免使用首字母缩略词和缩写词。“下次我会记住这一点,这与问题无关。下次使用注释。直到你无法避免使用答案作为评论,否则你的50次代表之路将非常漫长;-)谢谢,我是新来的。我下次再做。这和问题无关。下次使用注释。直到你无法避免使用答案作为评论,否则你的50次代表之路将非常漫长;-)谢谢,我是新来的。我下次再做。这些错误总有一天会让我丧命的。但仍然存在一个问题。从哪里开始计算行数?@MoonStruckHorrors,尝试使用类似eclipse的IDE。eclipse向您显示行号。此外,stacktrace的某些部分被转换为超链接,因此您可以单击异常并跳转到导致异常的行。如果无法使用命令行*nix,请使用VIM并使用跳转到行命令<代码>跳转到行号n。例如,要跳转到第42行,您可以键入:42,这些错误总有一天会让我丧命。但仍然存在一个问题。从哪里开始计算行数?@MoonStruckHorrors,尝试使用类似eclipse的IDE。eclipse向您显示行号。此外,stacktrace的某些部分被转换为超链接,因此您可以单击异常并跳转到导致异常的行。如果无法使用命令行*nix,请使用VIM并使用跳转到行命令<代码>跳转到行号n。例如,要跳转到第42行,您需要键入:42