2012-09-20 79 views
1

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

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

LoginFrame:

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方法检查的话) 。

+0

您是否尝试调试代码(例如使用eclipse)并观察变量传递? – lilalinux

+0

我使用JCreator。 – Matth963

+0

你没有显示你调用'loadSubjects()'的代码。请你能提供这个吗? –

回答

0

尝试首先检查您获得的异常类型。

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

0

是一种格式问题:把你的\空间之前在pathString:"\ "

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

0

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

1.username变量未初始化并保留。

2.value未正确赋值给它。

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

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

此外,所有这些代码的用户名初始化,分配,修改的部分。

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

答您的问题! :)

1

如果像这样的问题,你必须跟踪你的变量/字段,你已经注意到你的'用户名'字段为空。接下来的步骤应该是:

  1. 检查你的“h”对象做什么操作调用装入对象()方法之前,如果任何然后检查他们有什么影响,对用户名字段中HomeWorkFrame(使用的println或调试器) 。
  2. 检查您的LoginFrame中的passwordFound是否为true(因为如果它是false,它不会将值赋给h。用户名)
  3. 如果是,如果您的密码已在从文件中检索(使用相同的println语句,)

这种情况下,应帮助您找到最“空”的错误的假支票。

-1

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

相关问题