return 类型字符串的方法适用于 System.out.println(),但如果我想在 JLabel 中使用创建的字符串则不行
A method with return type String that works for System.out.println(), but not if I want to use the created String in a JLabel
好的,这就是交易...
我有一个 Student 类型的静态对象,名为 workingStudent。
学生有一个方法 return 学生的名字作为字符串。
我有一个带有 CardLayout JPanel 的 JFrame,它有 2 张卡片。
卡片 1 是登录屏幕,成功登录后,将 workingStudent 设置为通过此代码与用户帐户关联的任何对象..
private void validateLogin(ArrayList<Student> students){
boolean valid = false;
for(int i = 0; i < students.size(); i++){
if(username.getText().equals(students.get(i).getUsername())
&& password.getText().equals(students.get(i).getPassword()))
{
valid = true;
setWorkingStudent(students.get(i));
currentSemester=(students.get(i).getLastSemester());
System.out.println("Successful Login!");
cl.show(cards, HOMEPANEL);
System.out.println(workingStudent.getName());
}
}
if(valid == false){
System.out.println("Invalid Login, try again");
}
}
这似乎工作得很好。当此方法为 运行 时,它会无误地打印出 workingStudents 名称。这让我相信它也可以毫无错误地设置 workingStudent。
问题出现在下面的代码中,其中 workingStudent.getName() 应该添加到 JLabel 的文本中。
private JPanel homePanel() {
JPanel home = new JPanel();
home.setLayout(null);
home.setBackground(Color.DARK_GRAY);
JLabel hi = new JLabel("Hello, "+workingStudent.getName());
hi.setSize(400, 100);
hi.setLocation(10,10);
hi.setFont(new Font("Serif", Font.BOLD, 36));
hi.setForeground(Color.WHITE);
home.add(hi);
return home;
}
但是,我得到了 NullPointerException。我正在寻找一些 help/any 可能出错的解释。
为什么 getName() 在 validateLogin() 中工作得很好,但在 homePanel() 中却不行??
如有任何帮助,我们将不胜感激。
哦,这就是我使用 validateLogin 的地方(它响应按钮点击)
public void actionPerformed(ActionEvent e) {
if (e.getSource()==login){
System.out.println("Logging in...");
validateLogin(students);
}
else if (e.getSource()==register){
}
}
看起来您的程序在创建 workingStudent 变量之前调用了 homePanel 方法。尝试以这种方式修改您的代码:
private JPanel homePanel() {
JPanel home = new JPanel();
home.setLayout(null);
home.setBackground(Color.DARK_GRAY);
String greeting =
workingStudent==null?"Hello, unknown user":"Hello, "+workingStudent.getName();
JLabel hi = new JLabel(greeting);
hi.setSize(400, 100);
hi.setLocation(10,10);
hi.setFont(new Font("Serif", Font.BOLD, 36));
hi.setForeground(Color.WHITE);
home.add(hi);
return home;
}
好的,这就是交易... 我有一个 Student 类型的静态对象,名为 workingStudent。 学生有一个方法 return 学生的名字作为字符串。
我有一个带有 CardLayout JPanel 的 JFrame,它有 2 张卡片。 卡片 1 是登录屏幕,成功登录后,将 workingStudent 设置为通过此代码与用户帐户关联的任何对象..
private void validateLogin(ArrayList<Student> students){
boolean valid = false;
for(int i = 0; i < students.size(); i++){
if(username.getText().equals(students.get(i).getUsername())
&& password.getText().equals(students.get(i).getPassword()))
{
valid = true;
setWorkingStudent(students.get(i));
currentSemester=(students.get(i).getLastSemester());
System.out.println("Successful Login!");
cl.show(cards, HOMEPANEL);
System.out.println(workingStudent.getName());
}
}
if(valid == false){
System.out.println("Invalid Login, try again");
}
}
这似乎工作得很好。当此方法为 运行 时,它会无误地打印出 workingStudents 名称。这让我相信它也可以毫无错误地设置 workingStudent。
问题出现在下面的代码中,其中 workingStudent.getName() 应该添加到 JLabel 的文本中。
private JPanel homePanel() {
JPanel home = new JPanel();
home.setLayout(null);
home.setBackground(Color.DARK_GRAY);
JLabel hi = new JLabel("Hello, "+workingStudent.getName());
hi.setSize(400, 100);
hi.setLocation(10,10);
hi.setFont(new Font("Serif", Font.BOLD, 36));
hi.setForeground(Color.WHITE);
home.add(hi);
return home;
}
但是,我得到了 NullPointerException。我正在寻找一些 help/any 可能出错的解释。
为什么 getName() 在 validateLogin() 中工作得很好,但在 homePanel() 中却不行??
如有任何帮助,我们将不胜感激。
哦,这就是我使用 validateLogin 的地方(它响应按钮点击)
public void actionPerformed(ActionEvent e) {
if (e.getSource()==login){
System.out.println("Logging in...");
validateLogin(students);
}
else if (e.getSource()==register){
}
}
看起来您的程序在创建 workingStudent 变量之前调用了 homePanel 方法。尝试以这种方式修改您的代码:
private JPanel homePanel() {
JPanel home = new JPanel();
home.setLayout(null);
home.setBackground(Color.DARK_GRAY);
String greeting =
workingStudent==null?"Hello, unknown user":"Hello, "+workingStudent.getName();
JLabel hi = new JLabel(greeting);
hi.setSize(400, 100);
hi.setLocation(10,10);
hi.setFont(new Font("Serif", Font.BOLD, 36));
hi.setForeground(Color.WHITE);
home.add(hi);
return home;
}