1

あるクラスから別のクラスに文字列を渡そうとしていますが、取得する結果は「null」です。LoginFrameからHomeworkFrameに文字列のユーザー名を渡したい。

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

ユーザー名がnullであるため、明らかに「サブジェクトをロードできません」というエラーが発生します(printlnメソッドを使用してチェックしました)。

4

6 に答える 6

1

このような問題が発生した場合は、「ユーザー名」フィールドが null であることに気付いた場所から変数/フィールドを追跡する必要があります。次のステップは次のとおりです。

  1. loadObjects() メソッドを呼び出す前に、「h」オブジェクトに対して実行する操作を確認し、ある場合は、HomeWorkFrame のユーザー名フィールドにどのような影響があるかを確認します (println またはデバッガーを使用)。
  2. LoginFrame の passwordFound が true かどうかを確認します (false の場合、h.username に値が割り当てられないため)
  3. false の場合は、パスワードがファイルから取得されたかどうかを確認します (同じ println ステートメントを使用)。

この種のシナリオは、ほとんどの「null」バグを見つけるのに役立ちます。

于 2012-09-20T13:33:36.643 に答える
0

最初に、どのタイプの例外が発生するかを確認してください。

ファイルが存在しないか、リストがnullまたは...である可能性があります。

于 2012-09-20T13:17:54.173 に答える
0

フォーマットの問題です:\pathStringのスペースの前にaを入れてください:"\ "

"\ Subjects.txt"'+'を入れずに書く必要があります。

于 2012-09-20T13:18:28.867 に答える
0

If System.out.println(ユーザー名); null を表示します。これは、次のことを意味します。

1.username 変数は初期化されずに残されます。

2.値が適切に割り当てられていません。

3.静的変数である可能性があり、その値を変更しています。

これらの条件をすべて確認し、すでに提供されているメソッドの本体ではなく、loadSubjects() が呼び出されているコードのその部分を提供してください。

また、ユーザー名が初期化、割り当て、変更されるコードのすべての部分。

于 2012-09-20T13:18:51.100 に答える
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 に答える
-1

値を指定または渡す必要があります。そうしないと、実行する値が見つからないため、間違いなく Null が返されます。

于 2012-09-20T13:33:52.803 に答える