0

I have a program that reads a file with data. I save some of the columns in an ArrayList or in a HashMap. Each column has some data, a string with text or an 'empty' string, because the columns are separated by tabs. Some cells are empty, but then an empty string is saved in the ArrayList or HashMap, because it's still between two tabs.

When I want to print for example the HashMap 'PeopleHashMap' or the ArrayList 'GenderList', I get this error:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 8
    at project.GUI.SearchButtonActionPerformed(GUI.java:310)
    at project.GUI.access$400(GUI.java:26)
    at project.GUI$10.actionPerformed(GUI.java:171)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

When I put the same System.out.println line at the end of (so IN) the while loop, then the ArrayList/HashMap will be printed. But, of course, a lot of times (for each line). When I put it outside the while loop (like now), I get the error above. Could anyone tell me what's wrong? Line 310 they are talking about in the error, is the line with !!! left.

My code:

private void SearchButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    JFileChooser chooser = new JFileChooser();                          
    chooser.showOpenDialog(null);                                       
    File f  = chooser.getSelectedFile();
    String filename = f.getAbsolutePath();
    FileTextfield.setText(filename);

    try {    
        BufferedReader BR = new BufferedReader(new FileReader(f)); 
        String line;
        String name;
        String id;
        String gender;
        ArrayList<String> GenderList = new ArrayList<>();
            while ((line= BR.readLine()) != null){   
                String[] person = line.split("\\t");
!!!             name = person[8]; 
                id = person[0];
                gender = person[2];

                if (!GenderList.contains(gender)){
                    GenderList.add(gender);
                }

                if (PeopleHashMap.containsKey(name)){
                    ArrayList CurrentList = PeopleHashMap.get(name);
                    CurrentList.add(id);
                }
                if (!PeopleHashMap.containsKey(name)){
                    ArrayList<String> idList = new ArrayList<>();
                    idList.add(id);
                    PeopleHashMap.put(name, idList);
                }             
            }                  
        System.out.println(GenderList);  

Data example:

enter image description here

Steven
  • 39
  • 3

0 Answers0