-1

I have a register button where when i press register it should write the values to details.txt that was typed in the textfield. When i register for the first time it works but if the file contains some values it will freeze if i try to register the second time. Anyone can help to debug this pls?

Main Class

package assignment;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Assignment 
{   
JFrame mainFrame;
JPanel framePanel,leftPnl,topPnl,btmPnl;
JLabel welcomeLabel,studId,passwd;
JTextField studField,passField;
JButton logBtn,signBtn;
Color btnClr,btnTxtClr,backgroundClr,lblClr;


Font mainFont,labelFont;

public void mainPage()
{
    mainFrame = new JFrame("CGPA Calculator");
    framePanel = new JPanel();

//-------------------Creating Components/Setting Fonts/Color----------------
-------------------------------------------      
    //Color
    btnClr = new Color(0, 179, 60);
    btnTxtClr = new Color(255,255,255);
    backgroundClr = new Color(26, 26, 26);
    lblClr = new Color(255,255,255);

    //Fonts
    mainFont = new Font("Verdana",Font.PLAIN,40);
    labelFont = new Font("Verdana",Font.PLAIN,20);

    //Button

    logBtn = new JButton("<html><font face=\"Verdana\">Login</font></html>");//Source from:https://stackoverflow.com/questions/21046164/jbutton-text-with-different-font-family-in-different-words
    logBtn.setFocusPainted(false);
    logBtn.setBackground(btnClr);
    logBtn.setForeground(btnTxtClr);       


    signBtn = new JButton("<html><font face=\"Verdana\">Register</font></html>");
    signBtn.setFocusPainted(false);
    signBtn.setBackground(btnClr);
    signBtn.setForeground(btnTxtClr);      

    //Label
    welcomeLabel = new JLabel("CGPA Calculator");
    welcomeLabel.setForeground(lblClr);
    studId = new JLabel("Student ID :");
    studId.setForeground(lblClr);
    passwd = new JLabel("Password :");
    passwd.setForeground(lblClr);

    //TextField
    studField = new JTextField(8);

studField.setBorder(javax.swing.BorderFactory.createEmptyBorder());//Sourced From:https://stackoverflow.com/questions/2281937/swing-jtextfield-how-to-remove-the-border
    passField = new JTextField(8);
    passField.setBorder(BorderFactory.createEmptyBorder());

    //Adding Fonts to Components
    welcomeLabel.setFont(mainFont);
    studId.setFont(labelFont);
    passwd.setFont(labelFont);

    //Panel
    leftPnl = new JPanel();
    topPnl = new JPanel();
    btmPnl = new JPanel();

//----------------------Adding of panels/layout/components-------------------------------------------------------- 

    //Seting up layouts to panel
    leftPnl.setLayout(new FlowLayout());
    btmPnl.setLayout(new BoxLayout(btmPnl,BoxLayout.X_AXIS));

    //TOPPANEL(Adjustments)
    topPnl.setBackground(backgroundClr);
    topPnl.add(welcomeLabel);
    topPnl.add(Box.createRigidArea(new Dimension(0,150)));    

    //LEFTPANEL(Adjustements)
    leftPnl.setBackground(backgroundClr);
    leftPnl.add(Box.createRigidArea(new Dimension(0,70)));
    leftPnl.add(studId);  
    leftPnl.add(studField);
    leftPnl.add(passwd);
    leftPnl.add(passField);

    //BOTTOMPANEL
    btmPnl.setBackground(backgroundClr);
    btmPnl.add(Box.createRigidArea(new Dimension(130,0)));
    btmPnl.add(logBtn);
    btmPnl.add(Box.createRigidArea(new Dimension(40,0)));
    btmPnl.add(signBtn);
    btmPnl.add(Box.createRigidArea(new Dimension(200,200)));


    //Action Listeners(lambda expression)
    signBtn.addActionListener((ActionEvent e) -> {
     SignUpPage sign = new SignUpPage();
     sign.SecondPage();
     sign.getFrame().setVisible(true);
     //mainFrame.setVisible(false);

    });



    mainFrame.getContentPane().setBackground(backgroundClr);
    mainFrame.add(topPnl,BorderLayout.NORTH);
    mainFrame.add(leftPnl,BorderLayout.WEST);
    mainFrame.add(btmPnl,BorderLayout.SOUTH);
    mainFrame.setVisible(true);
    mainFrame.setSize(450,450);
    mainFrame.setResizable(false);
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) 
{
    Assignment display = new Assignment();
    display.mainPage();
     new SignUpPage();

}       
}

register class

package assignment;
import javax.swing.*;
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
import java.io.*;


public class SignUpPage 
{
private JFrame signFrame;
JTextField idField,passwdField;
JButton registerBtn,cancelBtn,resetBtn;
JLabel studIdLbl,passwdLbl,schoolLbl,label;
JComboBox schoolBox;
String [] school = {"School Of Computing & Creative Media","School Of 
Communication & Creative Arts","School Of Engineering","School Of Business"
                    ,"School of Hospiality Tourism & Culinary Arts"};
Font labelFont;
Color btnClr,btnTxtClr,lblClr,backgroundClr;
String selectSchool;
BufferedReader validateFile;
String details;
String detailsArray[];
int detailsExists = 0;


public void SecondPage()
{
    //ComboBox(Class)
    label = new JLabel("");

    //Color
    btnClr = new Color(0, 179, 60);
    btnTxtClr = new Color(255,255,255);
    backgroundClr = new Color(26, 26, 26);
    lblClr = new Color(255,255,255);

    //Font
    labelFont = new Font("Verdana",Font.PLAIN,13);

    //JTextField
    idField = new JTextField("Student ID",4); 
    idField.setMinimumSize(new Dimension(300,30));
    idField.setMaximumSize(new Dimension(300,30));
    idField.setBorder(javax.swing.BorderFactory.createEmptyBorder());


    passwdField = new JTextField("Password",4);
    passwdField.setMinimumSize(new Dimension(300,30));
    passwdField.setMaximumSize(new Dimension(300,30));
    passwdField.setBorder(javax.swing.BorderFactory.createEmptyBorder());


    //JComboBox
    schoolBox = new JComboBox(school);
    schoolBox.setFont(labelFont);
    schoolBox.setMinimumSize(new Dimension(300,30));
    schoolBox.setMaximumSize(new Dimension(300,30)); 
    schoolBox.addActionListener((ActionEvent e)->{
        JComboBox <String> schoolCombo = (JComboBox<String>) e.getSource();
        selectSchool = (String) schoolCombo.getSelectedItem();
    });

    //Panel
    JPanel fieldPnl = new JPanel();
    JPanel btnPnl = new JPanel();

    //Button
    registerBtn = new JButton("<html><font face=\"Verdana\">Register</font></html>");
    registerBtn.setBackground(btnClr);
    registerBtn.setForeground(lblClr);
    cancelBtn = new JButton("<html><font face=\"Verdana\">Cancel</font></html>");
    cancelBtn.setBackground(btnClr);
    cancelBtn.setForeground(lblClr);
    resetBtn = new JButton("<html><font face=\"Verdana\">Reset</font></html>");
    resetBtn.setBackground(btnClr);
    resetBtn.setForeground(lblClr);


    //Label
    studIdLbl = new JLabel("Student ID:");
    passwdLbl = new JLabel("Password");
    schoolLbl = new JLabel("School:");

    //Adding Components to Panel        
    fieldPnl.add(Box.createRigidArea(new Dimension(0,100)));
    fieldPnl.setBackground(backgroundClr);
    fieldPnl.add(idField);
    fieldPnl.add(Box.createRigidArea(new Dimension(0,10)));
    fieldPnl.add(passwdField);
    fieldPnl.add(Box.createRigidArea(new Dimension(0,10)));
    fieldPnl.add(schoolBox);
    fieldPnl.add(Box.createRigidArea(new Dimension(0,50)));

    btnPnl.setBackground(backgroundClr);
    btnPnl.add(registerBtn);
    btnPnl.add(cancelBtn);
    btnPnl.add(resetBtn);
    btnPnl.add(label);
    btnPnl.add(Box.createRigidArea(new Dimension(0,190)));



    //Layout
    fieldPnl.setLayout(new BoxLayout(fieldPnl,BoxLayout.Y_AXIS));


    //Action Listener
        registerBtn.addActionListener(new ActionListener() {             
        @Override
        public void actionPerformed(ActionEvent e) {

            BufferedWriter toFile;                
            try {
                signUpValidation();
                if(detailsExists==0)
                {
                    toFile = new BufferedWriter(new FileWriter("details.txt",true));
                    toFile.write(idField.getText() + "," + passwdField.getText() + ","+selectSchool);
                    toFile.newLine();
                    toFile.flush();
                }
                else if(detailsExists==1)
                {
                  //same values exists in file
                }




            } catch(FileNotFoundException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

        }
    });

    signFrame = new JFrame("Sign Up");    
    signFrame.add(btnPnl,BorderLayout.SOUTH);
    signFrame.add(fieldPnl,BorderLayout.CENTER);
    signFrame.setVisible(true);
    signFrame.setSize(450,450);
    signFrame.setResizable(false);
    signFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}

public Frame getFrame()
{
    return signFrame;
}    


public int signUpValidation() throws IOException
{

    validateFile = new BufferedReader(new FileReader("details.txt"));
    details = validateFile.readLine();   
    while(details!=null)
    {
        detailsArray=details.split(",");
        if(idField.equals(detailsArray[0]) || passwdField.equals(detailsArray[1]))
        {
            detailsExists = 1;
        }
        else
            detailsExists = 0;

    }
         return detailsExists;
}
}
Dexter Siah
  • 273
  • 2
  • 6
  • 17

1 Answers1

1

while(details!=null) prevents the loop from ever exiting, because details is not updated with in the loop's context - it never becomes null

Something like...

String details = null;
while((details = validateFile.readLine()) !=null) {...

might be safer. But based on your code, you're only expecting a single line, so getting rid of the loop altogether might be a better solution

MadProgrammer
  • 343,457
  • 22
  • 230
  • 366