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;

}