开发者

Trouble with Reading/Writing to text file program?

开发者 https://www.devze.com 2023-03-29 01:03 出处:网络
Problem 1: So basically I am reading from a text file(name, mark1, mark2) for 8 students, I store this in an ArrayList along with a String that is the path for a photo of the user - I then put all the

Problem 1: So basically I am reading from a text file(name, mark1, mark2) for 8 students, I store this in an ArrayList along with a String that is the path for a photo of the user - I then put all the student names in a ComboBox, and when the user selects a name, the two relevant marks and photo then need to be displayed in labels and a panel respectively. Problem is, I have no idea how to retrieve the information when the user selects a name from the ComboBox. My intial thought was to get the selected item and use that, but no idea where to from there...!

Problem 2: When I try to write new information to the text file I get a Nullpointer Excpetion!

//class for reading and writing to the text file

public class FileConnect {  

    ArrayList<Student> studs = new ArrayList<Student>();

    public FileConnect() {

        String s;
        String a;

        try {
            BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Student\\Desktop\\Marks.txt"));
            while ((s = br.readLine()) != null) {

                a = br.readLine();
                int i = Integer.parseInt(a);
                a = br.readLine();
                int k = Integer.parseInt(a);

                studs.add(new Student(s, "C:\\Users\\Student\\Desktop\\res\\" + s + ".png", i, k));
            }
        } catch (FileNotFoundException fnf) {
            System.out.println("FileNotFoundException: " + fnf);
        } catch (IOException ex) {
            System.out.println("IOException: " + ex);
        }
    }

    public void addStud(String name, String compLit, String linux) {
        try {
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\Users\\Student\\Desktop\\Marks.txt")), true);
            out.write(name);
            out.write(compLit);
            out.write(linux);
        } catch (IOException ex) {
            System.out.println("IOException: " + ex);
        }
    }
} 

//class for student accessor methods

public class Student {

    private String name;
    private int compLit;
    private int linux;
    private String photo;

    public Student(String name,  String photo, int compLit, int linux) {
        this.name = name;
        this.photo = photo;
        this.compLit = compLit;
        this.linux = linux;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCompLit() {
        return this.compLit;
    }

    public void setCompLit(int compLit) {
        this.compLit = compLit;
    }

    public int getLinux() {
        return this.linux;
    }

    public void setLinux(int linux) {
        this.linux = linux;
    }

    public String getPhoto() {
        return this.photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }

}

//main GUI where it all happens

public class MainGUI extends javax.swing.JFrame {

    String name;
    int compLit;
    int linux;
    String photo;

    private FileConnect file;
    private Student stu;

    public MainGUI() {


        initComponents();
    }
private void menuItemExitActionPerformed(java.awt.event.ActionEvent evt) {
        System.exit(0);
    }

    private void menuItemAboutActionPerformed(java.awt.event.ActionEvent evt) {
        Date now = new Date();
        JOptionPane.showMessageDialog(this, "Author: Jean van der Walt \n " + now, "About" , JOptionPane.INFORMATION_MESSAGE);
    }

    **private void cbStudActionPerformed(java.awt.event.ActionEvent evt) {
        //user selects item in combo box
        //get all the info for the selected item
        //display them 
        //I tried to do something with
        //cbStud.getSelected..... but don't think that'll work
    }**

    **private void btnStudAddActionPerformed(java.awt.event.ActionEvent evt) {
        file.addStud(tfStudName.getText(), tfStudCompLit.getText(), tfStudLinux.getText());
        //get a Nullpointer exception HERE!!!
    }**


    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainGUI().setVisible(true);
            }
        });
    }

-----> The text file I'm reading from looks like this:

Anthony Braddock \n 97 \n 87 ...... (7 more students) ---------------------------------->

//Entire GUI code

import java.util.Date;
import javax.swing.JOptionPane;

public class MainGUI extends javax.swing.JFrame {

    String name;
    int compLit;
    int linux;
    String photo;

    private FileConnect file = null;
    private Student stu = null;

    public MainGUI() {


        initComponents();
    }


    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        lblHeading = new javax.swing.JLabel();
        pnlSelectStud = new javax.swing.JPanel();
        cbStud = new javax.swing.JComboBox();
        pnlMarks = new javax.swing.JPanel();
        lblCompLitMark = new javax.swing.JLabel();
        lblLinuxMark = new javax.swing.JLabel();
        lblCompLitDisplay = new javax.swing.JLabel();
        lblLinuxDisplay = new javax.swing.JLabel();
        pnlPhoto = new javax.swing.JPanel();
        lblPic = new javax.swing.JLabel();
        pnlAddStud = new javax.swing.JPanel();
        lblStudName = new javax.swing.JLabel();
        lblStudCompLit = new javax.swing.JLabel();
        lblStudLinux = new javax.swing.JLabel();
        tfStudName = new javax.swing.JTextField();
        tfStudCompLit = new javax.swing.JTextField();
        tfStudLinux = new javax.swing.JTextField();
        btnStudAdd = new javax.swing.JButton();
        menuBar = new javax.swing.JMenuBar();
        menuFile = new javax.swing.JMenu();
        menuItemExit = new javax.swing.JMenuItem();
        menuEdit = new javax.swing.JMenu();
        menuItemAbout = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        lblHeading.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
        lblHeading.setText("Individual Student Marks");

        pnlSelectStud.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Select Student", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N

        cbStud.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Anthony Braddock", "Charl Fourie", "Darren Tiplady", "Jacobus Langenhoven", "Jaun Pierre Reyneke", "Johan van der Merwe", "Johannes Van Eck", "Lodewyk Duminy" }));
        cbStud.addActionListener(new java.awt.event.ActionListener() {
            public开发者_StackOverflow中文版 void actionPerformed(java.awt.event.ActionEvent evt) {
                cbStudActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout pnlSelectStudLayout = new javax.swing.GroupLayout(pnlSelectStud);
        pnlSelectStud.setLayout(pnlSelectStudLayout);
        pnlSelectStudLayout.setHorizontalGroup(
            pnlSelectStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlSelectStudLayout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addComponent(cbStud, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(20, Short.MAX_VALUE))
        );
        pnlSelectStudLayout.setVerticalGroup(
            pnlSelectStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlSelectStudLayout.createSequentialGroup()
                .addGap(61, 61, 61)
                .addComponent(cbStud, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(66, Short.MAX_VALUE))
        );

        pnlMarks.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Marks", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N

        lblCompLitMark.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lblCompLitMark.setText("Computer Literacy");

        lblLinuxMark.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lblLinuxMark.setText("Using Linux");

        lblCompLitDisplay.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lblCompLitDisplay.setText("UNKNOWN");

        lblLinuxDisplay.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lblLinuxDisplay.setText("UNKNOWN");

        javax.swing.GroupLayout pnlMarksLayout = new javax.swing.GroupLayout(pnlMarks);
        pnlMarks.setLayout(pnlMarksLayout);
        pnlMarksLayout.setHorizontalGroup(
            pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlMarksLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblCompLitMark)
                    .addComponent(lblLinuxMark))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 164, Short.MAX_VALUE)
                .addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblCompLitDisplay)
                    .addComponent(lblLinuxDisplay))
                .addGap(18, 18, 18))
        );
        pnlMarksLayout.setVerticalGroup(
            pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlMarksLayout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblCompLitMark)
                    .addComponent(lblCompLitDisplay))
                .addGap(37, 37, 37)
                .addGroup(pnlMarksLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblLinuxMark)
                    .addComponent(lblLinuxDisplay))
                .addContainerGap(64, Short.MAX_VALUE))
        );

        pnlPhoto.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Photo", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N

        javax.swing.GroupLayout pnlPhotoLayout = new javax.swing.GroupLayout(pnlPhoto);
        pnlPhoto.setLayout(pnlPhotoLayout);
        pnlPhotoLayout.setHorizontalGroup(
            pnlPhotoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlPhotoLayout.createSequentialGroup()
                .addGap(55, 55, 55)
                .addComponent(lblPic, javax.swing.GroupLayout.PREFERRED_SIZE, 129, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(54, Short.MAX_VALUE))
        );
        pnlPhotoLayout.setVerticalGroup(
            pnlPhotoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlPhotoLayout.createSequentialGroup()
                .addGap(33, 33, 33)
                .addComponent(lblPic, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(33, Short.MAX_VALUE))
        );

        pnlAddStud.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Add your name and marks", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N

        lblStudName.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lblStudName.setText("Name");

        lblStudCompLit.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lblStudCompLit.setText("Computer Literacy");

        lblStudLinux.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        lblStudLinux.setText("Using Linux");

        tfStudName.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        tfStudCompLit.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        tfStudLinux.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        btnStudAdd.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        btnStudAdd.setText("Add");
        btnStudAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnStudAddActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout pnlAddStudLayout = new javax.swing.GroupLayout(pnlAddStud);
        pnlAddStud.setLayout(pnlAddStudLayout);
        pnlAddStudLayout.setHorizontalGroup(
            pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlAddStudLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblStudName)
                    .addComponent(lblStudCompLit)
                    .addComponent(lblStudLinux))
                .addGap(14, 14, 14)
                .addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnlAddStudLayout.createSequentialGroup()
                        .addGap(14, 14, 14)
                        .addComponent(tfStudName, javax.swing.GroupLayout.PREFERRED_SIZE, 222, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(pnlAddStudLayout.createSequentialGroup()
                        .addGap(166, 166, 166)
                        .addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(tfStudLinux, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(tfStudCompLit, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE)))))
            .addComponent(btnStudAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 398, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        pnlAddStudLayout.setVerticalGroup(
            pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlAddStudLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblStudName)
                    .addComponent(tfStudName, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblStudCompLit)
                    .addComponent(tfStudCompLit, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(9, 9, 9)
                .addGroup(pnlAddStudLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblStudLinux)
                    .addComponent(tfStudLinux, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(9, 9, 9)
                .addComponent(btnStudAdd, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE))
        );

        menuFile.setText("File");

        menuItemExit.setText("Exit");
        menuItemExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemExitActionPerformed(evt);
            }
        });
        menuFile.add(menuItemExit);

        menuBar.add(menuFile);

        menuEdit.setText("Edit");

        menuItemAbout.setText("About");
        menuItemAbout.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemAboutActionPerformed(evt);
            }
        });
        menuEdit.add(menuItemAbout);

        menuBar.add(menuEdit);

        setJMenuBar(menuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pnlPhoto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlSelectStud, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pnlMarks, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlAddStud, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(26, 26, 26))
            .addGroup(layout.createSequentialGroup()
                .addGap(216, 216, 216)
                .addComponent(lblHeading)
                .addContainerGap(250, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(30, 30, 30)
                .addComponent(lblHeading, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(34, 34, 34)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(pnlMarks, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlSelectStud, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(pnlAddStud, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlPhoto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(19, 19, 19))
        );

        pack();
    }// </editor-fold>

    private void menuItemExitActionPerformed(java.awt.event.ActionEvent evt) {
        System.exit(0);
    }

    private void menuItemAboutActionPerformed(java.awt.event.ActionEvent evt) {
        Date now = new Date();
        JOptionPane.showMessageDialog(this, "Author: Jean van der Walt \n " + now, "About" , JOptionPane.INFORMATION_MESSAGE);
    }

    private void cbStudActionPerformed(java.awt.event.ActionEvent evt) {

        //user selects item in combo box
        //get all the info for the selected item
        //display them 
    }

    private void btnStudAddActionPerformed(java.awt.event.ActionEvent evt) {
        file.addStud(tfStudName.getText(), tfStudCompLit.getText(), tfStudLinux.getText());

    }


    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainGUI().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnStudAdd;
    private javax.swing.JComboBox cbStud;
    private javax.swing.JLabel lblCompLitDisplay;
    private javax.swing.JLabel lblCompLitMark;
    private javax.swing.JLabel lblHeading;
    private javax.swing.JLabel lblLinuxDisplay;
    private javax.swing.JLabel lblLinuxMark;
    private javax.swing.JLabel lblPic;
    private javax.swing.JLabel lblStudCompLit;
    private javax.swing.JLabel lblStudLinux;
    private javax.swing.JLabel lblStudName;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JMenu menuEdit;
    private javax.swing.JMenu menuFile;
    private javax.swing.JMenuItem menuItemAbout;
    private javax.swing.JMenuItem menuItemExit;
    private javax.swing.JPanel pnlAddStud;
    private javax.swing.JPanel pnlMarks;
    private javax.swing.JPanel pnlPhoto;
    private javax.swing.JPanel pnlSelectStud;
    private javax.swing.JTextField tfStudCompLit;
    private javax.swing.JTextField tfStudLinux;
    private javax.swing.JTextField tfStudName;
    // End of variables declaration//GEN-END:variables

}


Problem 1. it's kind of unclear what you have since you seem to be missing some of the gui code, but generally, i would store a Map<String, Student> which maps each "Student name" to their "Student instance" and use that to find the Student when chosen by the combo box (assuming you are showing the student names and that the names are unique).

Problem 2. You don't ever seem to be initializing file.

0

精彩评论

暂无评论...
验证码 换一张
取 消