'm trying to pass a String from one class to another class but the result I'm getting is 'null'. I want to pass the String username from LoginFrame to 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);
    }
}

Obviously I'm getting the error "Subjects cannot be loaded" as the username is null(I checked it by using the println method).

Thanks in advance
Matthew

I'm getting the error "Subjects cannot be loaded"

The code should always call the printStackTrace() method in catch blocks so you get the full text of the error message.

Where does the code assign a value to the variable that has a null value? Is the assignment done before the code tries to use it? Try debugging the code by adding some println statements to print out its value when it is assigned a value and when it is used.

Can you post the complete code as i dint get where exactly you were calling the method "loadSubjects()" from LoginFrame ..

I am guessing you are thinking that h.username = l.username; would automatically create a new String object from Login object and store in HomeworkFrame object. I believe that the value is disposed when you do dispose(). One way to try and see if that might be the cause is to add a method to add user name.

// in HomeworkFrame
public void addUsername(String uname) { username = uname; }

// when call
h.addUsername(l.username);

Hope this help...

Edited 4 Years Ago by Taywin

This article has been dead for over six months. Start a new discussion instead.