Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回类型为String的方法,适用于System.out.println(),但如果要在JLabel中使用创建的字符串,则不适用_Java_String_Swing_Nullpointerexception_Jlabel - Fatal编程技术网

Java 返回类型为String的方法,适用于System.out.println(),但如果要在JLabel中使用创建的字符串,则不适用

Java 返回类型为String的方法,适用于System.out.println(),但如果要在JLabel中使用创建的字符串,则不适用,java,string,swing,nullpointerexception,jlabel,Java,String,Swing,Nullpointerexception,Jlabel,好吧,就这么定了。。。 我有一个Student类型的静态对象,名为workingStudent。 学生有一个方法以字符串形式返回学生的姓名 我有一个JFrame和一个CardLayout JPanel,它有两张卡。 卡1是一个登录屏幕,成功登录后,通过此代码将workingStudent设置为与用户帐户关联的任何对象 private void validateLogin(ArrayList<Student> students){ boolean valid = false;

好吧,就这么定了。。。 我有一个Student类型的静态对象,名为workingStudent。 学生有一个方法以字符串形式返回学生的姓名

我有一个JFrame和一个CardLayout JPanel,它有两张卡。 卡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");
    }

}
但是,我得到了一个NullPointerException。我在寻求一些帮助/任何可能的错误解释

getName()如何在validateLogin()中正常工作,但在homePanel()中却不正常

任何帮助都将不胜感激

哦,这就是我使用validateLogin的地方(它响应一个按钮的点击)


看起来您的程序在创建学生变量之前调用了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;

}

您可以通过在JLabel中使用null check进行调试?当您通过单击复选标记获得关于先前问题的帮助时,不要忘记“接受”答案,这样人们就知道问题已经解决了:即使我执行System.out.println(workingStudent.getName()就在它用于JLabel之前,它仍然会打印出来。@camickr抱歉,我是新手!我必须学习堆栈溢出方式“我有一个静态对象…”为什么是
static
?这听起来更像是一个潜在的问题,而不是一个解决方案。为了更快地获得更好的帮助,请发布一个or。谢谢,我将立即尝试此操作。但正如您所知,所有这些代码都属于一个名为mainGUI的类,我在创建homePanel或任何方法之前,在这个类的开头声明了workingStudent变量还请记住,如果将workingStudent中的字符串打印为标准输出,则打印该字符串不会有任何问题。
public void actionPerformed(ActionEvent e) {
    if (e.getSource()==login){
        System.out.println("Logging in...");
        validateLogin(students);
    }
    else if (e.getSource()==register){

    }
}
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;

}