gpt4 book ai didi

java - 非常烦人的 AWT-EventQueue-0 NullPointerException。 (几乎固定。)

转载 作者:行者123 更新时间:2023-11-29 03:07:21 24 4
gpt4 key购买 nike

一直在研究并查看许多答案,但没有运气。

public class GUIinput extends JFrame{

//Num is the JTextfield variable used for later.
public JTextField num;
public JButton button;

public void test(){
//JPanel
JPanel panel = new JPanel();

//Welcome JLabel..Contains the welcome message.
JLabel welcome = new JLabel("Welcome to my Grade Calculator program!");
panel.add(welcome);

//Instructions J Label on how to work the program.
JLabel instructions = new JLabel("Enter your Mark and Weight to find your average grade!");
panel.add(instructions);

//JLabel---How many different assignments do the user want to evaluate?
JLabel number = new JLabel("<html><br>Firstly, please enter how many assignments/exams you want to evaluate?</html>");
panel.add(number);

//JTextField assigner.
num = new JTextField(18);
panel.add(num);


//Enter button
button = new JButton("Enter");
panel.add(button);


//JFrame maker.
setTitle("Grade Calculator");
setSize(575,250);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(panel);

//This action listener opens the new class Gradeanalysis(). The next window.
button.addActionListener(new Gradeanalysis());

//Action listener for the Textfield in case the user presses the enter key.
num.addActionListener(new Gradeanalysis());

}


public static void main(String[] args) {
new GUIinput().test();


}
}

此类用于程序的第一个窗口。该程序要求用户输入一个值,该值被发送到另一个类。 (等级分析)。

 public class Gradeanalysis extends GUIinput implements ActionListener{


@Override
public void actionPerformed (ActionEvent e){
int messageType = JOptionPane.PLAIN_MESSAGE;

/*ERROR IS HERE---*/JOptionPane.showMessageDialog(null,num.getText(),"fasfa",messageType);
JFrame frame = new JFrame("Grade Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createMainPanel());
frame.pack();
frame.setVisible(true);



}

现在我删掉了很多不需要的代码。所以程序应该做的是从第一个窗口获取用户输入,当用户单击输入按钮时,输入应该显示在 MessageDialog 屏幕上。不是新的 JFrame。

现在我明白问题出在带有星号的那一行,特别是“num.getText()”部分。

如果我添加“num = new JTextField();”在该行上方,MessageDialog 屏幕将为空白。我希望它显示上一屏幕的输入。

不知道该怎么做。感谢所有帮助,谢谢。

最佳答案

你的问题出在这里:

//This action listener opens the new class Gradeanalysis(). The next window.
button.addActionListener(new Gradeanalysis());

//Action listener for the Textfield in case the user presses the enter key.
num.addActionListener(new Gradeanalysis());

您添加了一个新的 Gradeanalysis,它没有指向文本字段的指针,也没有初始化它们的字段。你应该改变你的 Action 监听器,让它在一个单独的类中,并传入它影响的字段

ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int messageType = JOptionPane.PLAIN_MESSAGE;

JOptionPane.showMessageDialog(null, num.getText(), "fasfa", messageType);
JFrame frame = new JFrame("Grade Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JPanel());//dont have create main panel method
frame.pack();
frame.setVisible(true);
}
};
button.addActionListener(listener);

num.addActionListener(listener);

关于java - 非常烦人的 AWT-EventQueue-0 NullPointerException。 (几乎固定。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31443670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com