Java 返回类型为String的方法,适用于System.out.println(),但如果要在JLabel中使用创建的字符串,则不适用
好吧,就这么定了。。。 我有一个Student类型的静态对象,名为workingStudent。 学生有一个方法以字符串形式返回学生的姓名 我有一个JFrame和一个CardLayout JPanel,它有两张卡。 卡1是一个登录屏幕,成功登录后,通过此代码将workingStudent设置为与用户帐户关联的任何对象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;
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;
}