在尝试写入向量/使用jlist等中的向量数据时,继续获取Null Pointer Exception

时间:2010-12-13 11:13:13

标签: java nullpointerexception

嗨,我正在为一些课程做的工作遇到很多麻烦。 目前我的主要问题是:

  1. 程序不会让我使用调用savepart()方法的savep按钮 因为它抛出上面的错误。

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Menu.savepart(Menu.java:511)
    at Menu.actionPerformed(Menu.java:435)
    at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    
  2. 由于同样的错误,我似乎无法将mypart向量推送到Jlist中。我希望能够选择多个参与者,然后将这些参与者写入关系向量。

  3. 是的,我知道数据库会更好地完成这一切......但它是一门编程课程

    public class Menu extends JPanel implements ActionListener {
        private static final boolean shouldFill = true;
        private static final boolean shouldWeightX = true;
    
        private static String[] dayofthemonth = { "01", "02", "03", "04", "05", "06", "07", "08", "09",
            "10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
            "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
            "30", "31" };
        private static String[] monthoftheyear = { "01", "02", "03", "04", "05", "06", "07", "08",
            "09", "10", "11", "12" };
        private static String[] yearoftheyear = { "2009", "2010", "2011", "2012", "2013",
            "2014", "2015", "2016", "2017", "2018", "2019", "2020" };
        private static String[] hour = { "01", "02", "03", "04", "05", "06", "07", "08", "09",
            "10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
            "20", "21", "22", "23" };
        private static String[] minute = { "10", "20", "30", "40", "50", "60"};
        private static String[] satype = { "Meeting", "Teleconference", "Lunch"};
        private JTabbedPane tabbedPane = new JTabbedPane();
        static Vector<appointment> myappt = appointment.readFile("appointment.txt");
        static Vector<participant> mypart = participant.readFile("participant.txt");
        static Vector<relationships> myrel = relationships.readFile("relationships.txt");
        private JComboBox day = new JComboBox(dayofthemonth);
        private JComboBox month = new JComboBox(monthoftheyear);
        private JComboBox year = new JComboBox(yearoftheyear);
        private JComboBox shour = new JComboBox(hour);
        private JComboBox sminute = new JComboBox(minute);
        private JComboBox dday = new JComboBox(dayofthemonth);
        private JComboBox dmonth = new JComboBox(monthoftheyear);
        private JComboBox dyear = new JComboBox(yearoftheyear);
        private JComboBox dhour = new JComboBox(hour);
        private JComboBox dminute = new JComboBox(minute);
        private JComboBox atype = new JComboBox(satype);
        private JTextField atitletext = new JTextField (40);
        private static JTextField pfname = new JTextField (30);
        private static JTextField plname = new JTextField (30);
        private static JTextField ploc = new JTextField (30);
        private static JTextField pjtitle = new JTextField (30);
    
        private JTextArea adescriptiontext = new JTextArea(5,1);
        static DefaultListModel model = new DefaultListModel();
        JList plist = new JList(model);
    
        static int noparticipant;
        static int noappointment;
        private final String FORMAT = "dd/MM/yyyy,HH:mm";
    
        public Menu() {
            GridBagConstraints c = new GridBagConstraints();
    
            ImageIcon icon = createImageIcon("images/middle.gif");
            if (shouldFill) {
                // natural height, maximum width
                c.fill = GridBagConstraints.HORIZONTAL;
            }
            if (shouldWeightX) {
                c.weightx = 0.5;
            }
            // panel1
            JPanel panel = new JPanel(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 8;
            gbc.fill = GridBagConstraints.NONE;
            gbc.anchor = GridBagConstraints.CENTER;
            gbc.insets = new Insets(0, 0, 0, 0);
            gbc.weightx = 1;
            tabbedPane.addTab("Add A New Appointment", panel);
    
            // Create the combo box
            JLabel start = new JLabel("Start Date:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 0;
            panel.add(start, c);
    
            JLabel jl1 = new JLabel("Day:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 1;
            panel.add(jl1, c);
    
            day.setSelectedIndex(0);
            day.addActionListener(this);
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 1;
            c.gridy = 1;
            panel.add(day, c);
    
            JLabel jl2 = new JLabel("Month:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 3;
            c.gridy = 1;
            panel.add(jl2, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 4;
            c.gridy = 1;
            panel.add(month, c);
    
            JLabel jl3 = new JLabel("Year:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 6;
            c.gridy = 1;
            panel.add(jl3, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 7;
            c.gridy = 1;
            panel.add(year, c);
    
            JLabel jstime = new JLabel("Start Time:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 2;
            panel.add(jstime, c);
    
            JLabel jshour = new JLabel("Start Hour:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 3;
            panel.add(jshour, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 1;
            c.gridy = 3;
            panel.add(shour, c);
    
            JLabel jsminute = new JLabel("Start Minute:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 3;
            c.gridy = 3;
            panel.add(jsminute, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 4;
            c.gridy = 3;
            panel.add(sminute, c);
    
            JLabel end = new JLabel("End Date:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 5;
            panel.add(end, c);
    
            JLabel j20 = new JLabel("Day:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 6;
            panel.add(j20, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 1;
            c.gridy = 6;
            panel.add(dday, c);
    
            JLabel jl21 = new JLabel("Month:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 3;
            c.gridy = 6;
            panel.add(jl21, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 4;
            c.gridy = 6;
            panel.add(dmonth, c);
    
            JLabel j23 = new JLabel("Year:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 6;
            c.gridy = 6;
            panel.add(j23, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 7;
            c.gridy = 6;
            panel.add(dyear, c);
    
            JLabel jdtime = new JLabel("End Time:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 8;
            panel.add(jdtime, c);
    
            JLabel jdhour = new JLabel("End Hour:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 9;
            panel.add(jdhour, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 1;
            c.gridy = 9;
            panel.add(dhour, c);
    
            JLabel jdminute = new JLabel("End Minute:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 3;
            c.gridy = 9;
            panel.add(jdminute, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 4;
            c.gridy = 9;
            panel.add(dminute, c);
    
            JLabel space = new JLabel(" ");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 10;
            panel.add(space, c);
    
            JLabel atitle = new JLabel("Appointment Title:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 12;
            panel.add(atitle, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 2;
            c.gridy = 12;
            panel.add(atitletext, c);
    
            JLabel jtype = new JLabel("Appointment Type:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 4;
            c.gridy = 12;
            panel.add(jtype, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 6;
            c.gridy = 12;
            panel.add(atype, c);
    
            JLabel adescription = new JLabel("Appointment Description:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 14;
            panel.add(adescription, c);
    
            c.fill = GridBagConstraints.HORIZONTAL;
            c.ipady = 40;
            c.weighty = 1.0;
            c.gridwidth = 4;
            c.gridx = 2;
            c.gridy = 14;
            panel.add(adescriptiontext, c);
    
            JLabel aplist = new JLabel("Participant List:");
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 16;
            panel.add(aplist, c);
    
            populateplist();
            c.fill = GridBagConstraints.HORIZONTAL;
            c.ipady = 60;
            c.weighty = 1.0;
            c.gridwidth = 4;
            c.gridx = 2;
            c.gridy = 16;
            panel.add(plist, c);
    
            JButton savea = new JButton("Save Appointment");
            savea.setActionCommand("SaveA");
            savea.addActionListener(this); // set this object as the listener
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 6;
            c.gridy = 20;
            panel.add(savea, c); // add 'save' button to the panel
    
            // pane 2
    
            GridBagConstraints p2 = new GridBagConstraints();
    
            if (shouldFill) {
                // natural height, maximum width
                c.fill = GridBagConstraints.HORIZONTAL;
            }
            if (shouldWeightX) {
                c.weightx = 0.5;
            }
            JPanel panel1 = new JPanel(new GridBagLayout());
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 2;
            gbc.fill = GridBagConstraints.NONE;
            gbc.anchor = GridBagConstraints.CENTER;
            gbc.insets = new Insets(5, 5, 5, 5);
            gbc.weightx = 0.5;
            tabbedPane.addTab("Add A New Participant", panel1);
    
            JLabel partinfo = new JLabel("Enter New Participant Info:");
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 0;
            p2.gridy = 0;
            panel1.add(partinfo, p2);
    
            JLabel jpfname = new JLabel("Enter First Name");
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 0;
            p2.gridy = 1;
            panel1.add(jpfname, p2);
    
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 2;
            p2.gridy = 1;
            panel1.add(pfname, p2);
    
            JLabel jplname = new JLabel("Enter Last Name");
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 0;
            p2.gridy = 2;
            panel1.add(jplname, p2);
    
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 2;
            p2.gridy = 2;
            panel1.add(plname, p2);
    
            JLabel jpjtitle2 = new JLabel("Enter Location");
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 0;
            p2.gridy = 4;
            panel1.add(jpjtitle2, p2);
    
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 2;
            p2.gridy = 4;
            panel1.add(ploc, p2);
    
            JLabel jpjtitle = new JLabel("Enter Job Title");
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 0;
            p2.gridy = 6;
            panel1.add(jpjtitle, p2);
    
            p2.fill = GridBagConstraints.HORIZONTAL;
            p2.gridx = 2;
            p2.gridy = 6;
            panel1.add(pjtitle, p2);
    
            JButton savep = new JButton("Save Participant");
            savep.setActionCommand("SaveP");
            savep.addActionListener(this); // set this object as the listener
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 7;
            panel1.add(savep, c); // add 'save' button to the panel
    
            // pane 3
            JPanel panel2 = new JPanel(new GridBagLayout());
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 2;
            gbc.fill = GridBagConstraints.NONE;
            gbc.anchor = GridBagConstraints.CENTER;
            gbc.insets = new Insets(5, 5, 5, 5);
            gbc.weightx = 0.5;
            tabbedPane.addTab("Delete an Appointment", panel2);
    
            // pane 4
            JPanel panel3 = new JPanel(new GridBagLayout());
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 2;
            gbc.fill = GridBagConstraints.NONE;
            gbc.anchor = GridBagConstraints.CENTER;
            gbc.insets = new Insets(5, 5, 5, 5);
            gbc.weightx = 0.5;
            tabbedPane.addTab("Delete Participant", panel3);
    
            // pane 5
            JPanel panel5 = new JPanel(new GridBagLayout());
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 2;
            gbc.fill = GridBagConstraints.NONE;
            gbc.anchor = GridBagConstraints.CENTER;
            gbc.insets = new Insets(5, 5, 5, 5);
            gbc.weightx = 0.5;
            tabbedPane.addTab("Search", panel5);
    
            // Add the tabbed pane to this panel.
            add(tabbedPane);
    
            // The following line enables to use scrolling tabs.
            tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
            // TODO Auto-generated constructor stub
        }
        protected static ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = Menu.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println("Couldn't find file: " + path);
                return null;
            }
        }
        public void actionPerformed(ActionEvent evt) {
            String strAction = evt.getActionCommand();
    
            if (strAction.equals("SaveA")) {
    
                JOptionPane.showMessageDialog(this, "You have saved 'Hello'",
                        "Hello!", JOptionPane.INFORMATION_MESSAGE);
            } else if (strAction.equals("SaveP")) {
    
                savepart();
    
                JOptionPane.showMessageDialog(this, "You have saved 'Hello'",
                        "Hello!", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        public void saveappt() {
            String ssday;
            String ssmonth;
            String ssyear;
            String sshour;
            String ssminute;
            String seday;
            String semonth;
            String seyear;
            String sehour;
            String seminute;
            String satitle;
            String satype;
            String sadescription;
            String startdt;
            String enddt;
            try{
                ssday = (String) day.getSelectedItem();
                ssmonth = (String) month.getSelectedItem();
                ssyear = (String) year.getSelectedItem();
                sshour = (String) shour.getSelectedItem();
                ssminute = (String) sminute.getSelectedItem();
                seday = (String) dday.getSelectedItem();
                semonth = (String) dmonth.getSelectedItem();
                seyear = (String) dyear.getSelectedItem();
                sehour = (String) dhour.getSelectedItem();
                seminute = (String) dminute.getSelectedItem();
                satitle = (String) atitletext.getText();
                sadescription= (String) adescriptiontext.getText();
                satype = (String) atype.getSelectedItem();
                startdt = ssday + "/" + ssmonth + "/" + ssyear + "," + sshour + ":" + ssminute;
                enddt = seday + "/" + semonth + "/" + seyear + "," + sehour + ":" + seminute;
                Date startdate;
                Date enddate;
                ParsePosition pos;
                pos = new ParsePosition(0);
                SimpleDateFormat checker = new SimpleDateFormat ("dd/MM/yyyy,hh:mm");
                startdate = checker.parse(startdt,pos);
                ParsePosition pos1;
                pos1 = new ParsePosition(0);
                enddate = checker.parse(enddt,pos1);
    
                noappointment++;
                int aid=noappointment;
                appointment z =new appointment (aid,startdate,enddate,satitle,sadescription,satype);
                myappt.add(z);
                makestore();
    
            }catch(Exception e){
    
            }
        }
    
        public static void savepart() {
            String sfname;
            String slname;
            String sloc;
            String sjtitle;
    
            sfname = (String) pfname.getText();
            slname = (String) plname.getText();
            sloc = (String) ploc.getText();
            sjtitle = (String) pjtitle.getText();
    
            // noparticipant++;
            // int pid=noparticipant;
            int pid=1;
            participant z =new participant (pid,sfname,slname,sloc,sjtitle);
            mypart.add(z);
    
        }
    
        private static void populateplist() {
            if(mypart!=null){
    
                model.clear();
                //creates an instance of the addressbook object to use to reflect a record in the vector.
                participant thisparticipant;
                //loop through each element of the vector - for loop blueprint taken from "Citation.java
                for (int n = 0; n < mypart.size(); n++){
                    //equates thisaddress with an element in the vector
                    thisparticipant = (participant) mypart.elementAt(n);
                    // Prints out the entry number and details from the Vector
                    String pname = thisparticipant.firstname +thisparticipant.lastname;
                    model.addElement(pname);
                }
            }else{
                model.addElement("No Participants Please Add One");
            }
        }
    
        /**
         * Create the GUI and show it. For thread safety, this method should be
         * invoked from the event dispatch thread.
         */
        private static void createAndShowGUI() {
            // Create and set up the window.
            JFrame frame = new JFrame("Appointment System");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // Add content to the window.
            frame.add(new Menu(), BorderLayout.CENTER);
    
            // Display the window.
            frame.pack();
            frame.setVisible(true);
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    // Turn off metal's use of bold fonts
                    UIManager.put("swing.boldMetal", Boolean.FALSE);
                    createAndShowGUI();
                }
            });
        }
    
        private static void makestore(){
            appointment thisappointment; // Create an instance of citation to act as a temporary store
            participant thisparticipant;
            relationships thisrelationships;
            try{
                // creates a printwriter which outputs to address.txt
                PrintWriter outFile = new PrintWriter(new BufferedWriter(new FileWriter("appointment.txt")));
                //loop through each element of the vector - loop blueprint taken from "Citation.java"
                for (int n=0; n<myappt.size(); n++)
                {
                    //points thisaddress at the right element of the vector
                    thisappointment=(appointment)myappt.elementAt(n);
                    outFile.print(thisappointment.appointmentid);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisappointment.startdatetime);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisappointment.enddatetime);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisappointment.appttype);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisappointment.apptdescription);
                    outFile.print(";");
                    outFile.print(" ");
    
                }
                // closes the output file.
                outFile.close();
    
                //catches any input/output errors from "Simple File Writing"
            }catch(IOException e){
                System.out.println("An i/o error has occurred ["+e+"]");
            }
            try{
                // creates a printwriter which outputs to address.txt
                PrintWriter outFile = new PrintWriter(new BufferedWriter(new FileWriter("participant.txt")));
                //loop through each element of the vector - loop blueprint taken from "Citation.java"
                for (int n=0; n<mypart.size(); n++)
                {
                    //points thisaddress at the right element of the vector
                    thisparticipant=(participant)mypart.elementAt(n);
                    outFile.print(thisparticipant.firstname);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisparticipant.lastname);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisparticipant.location);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisparticipant.jobtitle);
                    outFile.print(";");
                    outFile.print(" ");
    
                }
                // closes the output file.
                outFile.close();
    
                //catches any input/output errors from "Simple File Writing"
            }catch(IOException e){
                System.out.println("An i/o error has occurred ["+e+"]");
            }
            try{
                // creates a printwriter which outputs to address.txt
                PrintWriter outFile = new PrintWriter(new BufferedWriter(new FileWriter("relationships.txt")));
                //loop through each element of the vector - loop blueprint taken from "Citation.java" by 
                for (int n=0; n<myrel.size(); n++)
                {
                    //points thisaddress at the right element of the vector
                    thisrelationships=(relationships)myrel.elementAt(n);
                    outFile.print(thisrelationships.appointmentid);
                    outFile.print(";");
                    outFile.print(" ");
                    outFile.print(thisrelationships.participantid);
                    outFile.print(";");
                    outFile.print(" ");
    
                }
                // closes the output file.
                outFile.close();
    
                //catches any input/output errors from "Simple File Writing" by
            }catch(IOException e){
                System.out.println("An i/o error has occurred ["+e+"]");
            }
        }
    
        //constructs the relationship object and way of creating a record
        private static class relationships
        {
            int participantid;
            int appointmentid;
            static int norelationships;
            relationships(int pid, int aid)
            {
                participantid =pid;
                appointmentid =aid;
            }
            public static Vector<relationships> readFile(String fileName) {
                boolean rexists = (new File(fileName)).exists();
                if(rexists){
    
                    Vector<relationships> addid = new Vector<relationships>();
                    try {
                        Scanner scanner =
                            new Scanner(new File(fileName));
                        scanner.useDelimiter(System.getProperty("line.separator"));
                        while (scanner.hasNext()) {
                            addid.addElement(parseLine(scanner.next()));
                        }
                        scanner.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("Please check your inported text file and change all delimiters to ;");
                    }
                }
                else{
                    try{
                        // creates a printwriter which outputs to address.txt
                        PrintWriter outFile = new PrintWriter(new BufferedWriter(new FileWriter("relationships.txt")));
                        //loop through each element of the vector - loop blueprint taken from "Citation.java"
    
                        // closes the output file.
                        outFile.close();
                        //catches any input/output errors from "Simple File Writing"
                    }catch(IOException e){
                        System.out.println("An i/o error has occurred ["+e+"]");
                    }
    
                }
                return myrel;
            }
            private static relationships parseLine(String line) {
                Scanner lineScanner = new Scanner(line);
                try{
                    lineScanner.useDelimiter("\\s*;\\s*");// Delimiter is 0 or more spaces then a semicolon then zero or more spaces
                    int pid = lineScanner.nextInt();
                    int aid = lineScanner.nextInt();
    
                    relationships c =new relationships (pid,aid);
                    return c;
                }
                catch(Exception e){
                    System.out.println("Please check your relationships text file and change all delimiters to ;");
                }
                return null;
            }
    
        }
        private static class participant
    
        {
            int participantid;
            String firstname;
            String lastname;
            String location;
            String jobtitle;
            ;
            static int noPrintappt;
    
            participant(int pid,String fn, String ln, String loc, String jt) // The constructor
            {
                noparticipant++; // count total number of addresses
    
                participantid=noparticipant;
                participantid=pid;// set instance variables
                firstname=fn;
                lastname=ln;
                location=loc;
                jobtitle=jt;
            }
    
            int printappt() // NB printRef now returns an int
            {
                noPrintappt++; // count number of times printref has been called
                System.out.println ("Participant ID:" + participantid);
                System.out.println ("Name:" + firstname + lastname);
                System.out.println ("Location:" + location);
                System.out.println ("Job Title: " + jobtitle);
    
                return noPrintappt; // set the return value for the method
                // (must be an int, as declared above)
            }
    
            public static Vector<participant> readFile(String fileName) {
                boolean pexists = (new File(fileName)).exists();
                if(pexists){
                    Vector<participant> addid = new Vector<participant>();
                    try {
                        Scanner scanner =
                            new Scanner(new File(fileName));
                        scanner.useDelimiter(System.getProperty("line.separator"));
                        while (scanner.hasNext()) {
                            addid.addElement(parseLine(scanner.next()));
                        }
                        scanner.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("Please check your inported text file and change all delimiters to ;");
                    }
                }
                else{
                    try{
                        // creates a printwriter which outputs to address.txt
                        PrintWriter outFile = new PrintWriter(new BufferedWriter(new FileWriter("participant.txt")));
                        //loop through each element of the vector - loop blueprint taken from "Citation.java"
    
                        // closes the output file.
                        outFile.close();
                        //catches any input/output errors from "Simple File Writing"
                    }catch(IOException e){
                        System.out.println("An i/o error has occurred ["+e+"]");
                    }
    
                }
                return mypart;
    
            }
    
            private static participant parseLine(String line) {
                Scanner lineScanner = new Scanner(line);
                try{
                    lineScanner.useDelimiter("\\s*;\\s*");// Delimiter is 0 or more spaces then a semicolon then zero or more spaces
                    int pid = lineScanner.nextInt();
                    String fn = lineScanner.next();
                    String ln = lineScanner.next();
                    String loc = lineScanner.next();
                    String jt = lineScanner.next();
    
                    participant c =new participant (pid,fn,ln,loc,jt);
                    return c;
                }
                catch(Exception e){
                    System.out.println("Please check your participant text file and change all delimiters to ;");
                }
                return null;
            }
        }
    
        //constructs the appointment object and way of creating a record
        private static class appointment
    
        {
            int appointmentid;
            Date startdatetime;
            Date enddatetime;
            String appttitle;
            String apptdescription;
            String appttype;
    
            static int noPrintappt;
    
            appointment(int aid,Date sdt, Date edt,String atitle, String adesc, String atype) // The constructor
            {
                noappointment++; // count total number of addresses
    
                appointmentid=noappointment;// set instance variables
                aid= appointmentid;
                startdatetime=sdt;
                enddatetime=edt;
                appttitle=atitle;
                apptdescription=adesc;
                appttype=atype;
            }
    
            int printappt() // NB printRef now returns an int
            {
                noPrintappt++; // count number of times printref has been called
                System.out.println ("Start Date and Time :" + startdatetime);
                System.out.println ("End Date and Time :" + enddatetime);
                System.out.println ("Appointment Type:" + appttype);
                System.out.println (appttitle +" - "+apptdescription);
    
                return noPrintappt; // set the return value for the method
                // (must be an int, as declared above)
            }
    
            public static Vector<appointment> readFile(String fileName) {
    
                boolean aexists = (new File(fileName)).exists();
                if(aexists){
                    Vector<appointment> addid = new Vector<appointment>();
                    try {
                        Scanner scanner =
                            new Scanner(new File(fileName));
                        scanner.useDelimiter(System.getProperty("line.separator"));
                        while (scanner.hasNext()) {
                            addid.addElement(parseLine(scanner.next()));
                        }
                        scanner.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("Please check your inported text file and change all delimiters to ;");
                    }
                }
                else{
                    try{
                        // creates a printwriter which outputs to address.txt
                        PrintWriter outFile = new PrintWriter(new BufferedWriter(new FileWriter("appointment.txt")));
                        //loop through each element of the vector - loop blueprint taken from "Citation.java"
                        // closes the output file.
                        outFile.close();
                        //catches any input/output errors from "Simple File Writing"
                    }catch(IOException e){
                        System.out.println("An i/o error has occurred ["+e+"]");
                    }
                }
                return myappt;
            }
    
            private static appointment parseLine(String line) {
                Scanner lineScanner = new Scanner(line);
                try{
                    lineScanner.useDelimiter("\\s*;\\s*");// Delimiter is 0 or more spaces then a semicolon then zero or more spaces
                    int aid = lineScanner.nextInt();
                    String sdt = lineScanner.next();
                    String edt = lineScanner.next();
                    String atitle = lineScanner.next();
                    String adesc = lineScanner.next();
                    String atype = lineScanner.next();
                    Date startdate;
                    Date enddate;
                    ParsePosition pos;
                    pos = new ParsePosition(0);
                    SimpleDateFormat checker = new SimpleDateFormat ("dd/MM/yyyy,hh:mm");
                    startdate = checker.parse(sdt,pos);
                    ParsePosition pos1;
                    pos1 = new ParsePosition(0);
                    enddate = checker.parse(edt,pos1);
    
                    appointment c =new appointment (aid,startdate,enddate,atitle,adesc,atype);
                    return c;
                }
                catch(Exception e){
                    System.out.println("Please check your appointment text file for date format errors or where ; is not used as a delimiter");
                }
                return null;
            }
        }
    }
    

2 个答案:

答案 0 :(得分:0)

您的participant.readFile方法存在问题。您应该返回addid向量,而不是mypart,这是null。

    public static Vector<participant> readFile(String fileName) {
        boolean pexists = (new File(fileName)).exists();
        if (pexists) {
            Vector<participant> addid = new Vector<participant>();
            try {
                Scanner scanner = new Scanner(new File(fileName));
                scanner.useDelimiter(System.getProperty("line.separator"));
                while (scanner.hasNext()) {
                    addid.addElement(parseLine(scanner.next()));
                }
                scanner.close();
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Please check your inported text file and change all delimiters to ;");
            }
        } else {
            try {
                // creates a printwriter which outputs to address.txt
                PrintWriter outFile = new PrintWriter(new BufferedWriter(new FileWriter("participant.txt")));
                // loop through each element of the vector - loop blueprint taken from "Citation.java" by Amadeo and
                // Adam Moore.for G54PRG

                // closes the output file.
                outFile.close();
                // catches any input/output errors from "Simple File Writing" by Amadeo and Adam Moore.for G54PRG
            } catch (IOException e) {
                System.out.println("An i/o error has occurred [" + e + "]");
            }

        }
        return mypart; //<--- this is null!
    }

答案 1 :(得分:0)

问题位于readFile(String fileName)类的participant方法中:您将文件中的值添加到局部变量addid,但返回mypart,是null