阅读/写入文本文件程序有困难吗?

时间:2011-08-16 18:46:12

标签: java exception

问题1:所以基本上我正在从8个学生的文本文件(name,mark1,mark2)中读取,我将它存储在一个ArrayList中,并附带一个String,这是用户照片的路径 - 然后我把它ComboBox中的所有学生姓名,当用户选择名称时,需要分别在标签和面板中显示两个相关标记和照片。问题是,当用户从ComboBox中选择一个名字时,我不知道如何检索信息。我的初步想法是获取所选项目并使用它,但不知道从那里到哪里......!

问题2:当我尝试将新信息写入文本文件时,我得到了Nullpointer Excpetion!

//用于读取和写入文本文件的类

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

- - - - &GT;我正在阅读的文本文件如下所示:

Anthony Braddock \ n 97 \ n 87 ......(另外7名学生) ----------------------------------&GT;

//整个GUI代码

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 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

}

1 个答案:

答案 0 :(得分:0)

问题1.由于你似乎缺少一些gui代码,所以你有什么不清楚,但一般来说,我会存储一个Map<String, Student>,它将每个“学生名”映射到他们的“学生实例”并在组合框选择时使用它来查找学生(假设您显示学生姓名并且名称是唯一的)。

问题2.您似乎没有初始化file