2012-09-20 82 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,因爲它不會找到任何要執行的值。

相關問題