我已经坚持了一段时间了,如果有人能给我一些见解,那将非常感激。堆栈跟踪控制台指向frame.add(showname);以及新的GradeProg();控制台声明:
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1040)
at java.awt.Container.add(Container.java:958)
at javax.swing.JFrame.addImpl(JFrame.java:540)
at java.awt.Container.add(Container.java:363)
at GradeProg.<init>(GradeProg.java:39)
at GradeProg.main(GradeProg.java:68)
根据我的理解,部分归功于这个伟大的网站,是showame变量未初始化,但我相信我已经初始化它。这是代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class GradeProg extends JFrame implements ActionListener {
JLabel label, label2, showname, showgrade;
TextField field, field2;
JFrame frame;
JButton enter;
String grade, name;
int parse;
public GradeProg() {
frame = new JFrame("Student Grades");
frame.setLayout(new GridBagLayout());
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setSize(600, 300);
label = new JLabel("Student Name: ");
field = new TextField("", 12);
label2 = new JLabel(" Score ");
field2 = new TextField("", 5);
enter = new JButton("Enter");
enter.addActionListener(this);
frame.add(label);
frame.add(field);
frame.add(label2);
frame.add(field2);
frame.add(enter);
frame.add(showname);
frame.add(showgrade);
}
@Override
public void actionPerformed(ActionEvent e) {
parse = Integer.parseInt(field2.getText());
if (parse >= 90 && parse <= 100) {
grade = "A";
} else if (parse >= 80 && parse <= 89) {
grade = "B";
} else if (parse >= 70 && parse <= 79) {
grade = "C";
} else if (parse >= 60 && parse <= 69) {
grade = "D";
} else if (parse >= 0 && parse <= 59) {
grade = "F";
}
showgrade = new JLabel("Grade: " + grade);
showname = new JLabel(field.getText());
}
public static void main(String[] args)
{
new GradeProg();
}
}
同样,我们非常感谢任何帮助或整体建议。 Thakns