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