1

我试图将一个字符串从一个类传递到另一个类,但我得到的结果是'null'。我想将字符串用户名从 LoginFrame 传递给 HomeworkFrame;

作业框架:

public void loadSubjects (){
    String item;
    try{
        System.out.println(username);
        Scanner f = new Scanner (new FileReader (username + " " + "Subjects" + ".txt"));
        while(f.hasNext()){
            item = f.nextLine();
            chSubjects.add(item);
        }
        f.close();  
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, "Subjects cannot be loaded!", "Error", JOptionPane.ERROR_MESSAGE);
    }
}   

登录框架:

 public void loginUser(){
    r = new Registration();
    h = new HomeworkFrame();
    l = new Login();

    l.username = txtUser.getText();
    l.password = txtPass.getText();
    try{
        String line;
        boolean passwordFound = false ;
        BufferedReader f = new BufferedReader(new FileReader(l.username + ".txt"));
        while((line = f.readLine()) != null){
            if(line.equals(l.password)){
                passwordFound = true;
            }
        }

        if(passwordFound){
                h.username = l.username;
                dispose();
                m.setSize(700,600);
                m.setLocation(100,100);
                m.setVisible(true);
            }else{
                JOptionPane.showMessageDialog(null, "Wrong information!", "Error", JOptionPane.ERROR_MESSAGE);
            }
        f.close();
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, "Wrong information!", "Error", JOptionPane.ERROR_MESSAGE);
    }
}

显然我收到错误“无法加载主题”,因为用户名为空(我使用 println 方法检查了它)。

4

6 回答 6

1

如果出现此类问题,您必须从您注意到您的“用户名”字段为空的地方跟踪您的变量/字段。下一步应该是:

  1. 在调用 loadObjects() 方法之前检查您对“h”对象执行的操作,如果有,然后检查它们对 HomeWorkFrame 中的用户名字段的影响(使用 println 或调试器)。
  2. 检查您在 LoginFrame 中的 passwordFound 是否为真(因为如果为假,它不会为 h.username 赋值)
  3. 如果它是错误的,请检查您的密码是否已从文件中检索(使用相同的 println 语句)

这种情况应该可以帮助您找到大多数“空”错误。

于 2012-09-20T13:33:36.643 回答
0

public class LoginFrame{

   private HomeworkFrame hw;

   public void doSomething(){

          String username = "your username";
          hw = new HomeworkFrame(username);
   }
}
public class HomeworkFrame{

   public HomeworkFrame(String username){

            doSomething with 'username'
   }
}

回答你的问题!:)

于 2012-09-20T13:32:22.453 回答
0

首先尝试检查您得到哪种类型的异常。

可能是文件不存在或列表为空或....

于 2012-09-20T13:17:54.173 回答
0

是格式问题:\在 pathString 的空格前放一个:"\ "

你必须写它"\ Subjects.txt",中间没有'+'。

于 2012-09-20T13:18:28.867 回答
0

如果System.out.println(username); 显示 null这意味着

1.username 变量未初始化而离开。

2.value没有正确分配给它。

3.它可能是一个静态变量,你正在改变它的值。

请检查所有这些条件,并提供调用 loadSubjects() 的那部分代码,而不是您已经提供的该方法的主体。

还有所有那些初始化、分配、修改用户名的代码部分。

于 2012-09-20T13:18:51.100 回答
-1

需要指定或传递该值,否则它肯定会给出 Null,因为它找不到任何要执行的值。

于 2012-09-20T13:33:52.803 回答