Исключение за пределами массива с JTable для ma c, но не windows? - PullRequest
0 голосов
/ 22 января 2020

Так что я создаю своего рода программу для студентов, где я могу создавать задания со стандартами и добавлять к ним оценки учеников.

Как это в основном работает, я создаю таблицу и добавляю столбцы в зависимости от того, какие стандарты были включены, и добавляю строки, относящиеся к оценкам учащегося, в каждом стандарте. Затем пользователь редактирует таблицу, затем нажимает «Сохранить», и моя программа в основном просто берет данные из таблицы и добавляет их к объектам ученика и сохраняет их в каталоге программы.

По некоторым причинам, она работает отлично на моей машине windows, но при добавлении оценок для студентов машина OSX возвращает исключение, говорящее "java .lang.ArrayIndexOutOfBoundsException: 5> = 5", в то время как оно делает то, что должно быть на машине windows.

Я заставил программу распечатать трассировку стека, и она напечатала

java.base/java.util.Vector.elementAt(Unknown Source)
java.desktop/javax.swing.able.DefaultTableColumnModel.getColumn(Unknown Source)

Я выделил код, в котором это происходит, и обнаружил, что это происходит в этом блоке try catch

try {
            if (elig) {
                File assignment = new File(System.getProperty("user.home")+"/StudentDataHub/Resources/Assignments/" + labelName.getText() + ".txt");
                FileInputStream fi = new FileInputStream(assignment);
                ObjectInputStream oi = new ObjectInputStream(fi);

            Assignment ass = (Assignment) oi.readObject();

            oi.close();
            fi.close();

            //actual grade adding
            for (int i = 0; i <= ass.students.size() - 1; i++) {
                String[] args = tableActualGrades.getValueAt(i, 0).toString().split(" ");  //opening files
                String studfilename = args[0].toLowerCase() + args[1].toLowerCase();

                File studfileog = new File(System.getProperty("user.home")+"/StudentDataHub/Resources/Students/" + studfilename + ".txt");
                FileInputStream fi1 = new FileInputStream(studfileog);
                ObjectInputStream oi1 = new ObjectInputStream(fi1);

                Student stud = (Student) oi1.readObject();

                oi1.close();
                fi1.close();

                int asspos = -1;  //finding the assignment position in the stud.assignments arraylist

                for (int j = 0; j <= stud.assignments.size() - 1; j++) {
                    if (stud.assignments.get(j).getAssignmentname().equalsIgnoreCase(ass.getAssignmentname())) {
                        asspos = j;
                        j = stud.assignments.size();
                    }
                }

                boolean[] gotstandards = ass.getStandards();  //a boolean array which determines which of the standards have been enabled or disabled
                int[] actualgrades = new int[8];  

                for (int j = 0; j <= 4; j++) { //gets the values from the table according to which standards have been enabled/disabled and adds them to the student's grade arrays
                    if (gotstandards[j]) {
                        actualgrades[j] = Integer.parseInt(tableActualGrades.getValueAt(i, j + 1).toString());
                    } else {
                        actualgrades[j] = -1;
                    }
                }

                actualgrades[5] = Integer.parseInt(tableActualGrades.getValueAt(i, tableActualGrades.getColumnCount() - 3).toString());
                actualgrades[6] = Integer.parseInt(tableActualGrades.getValueAt(i, tableActualGrades.getColumnCount() - 2).toString());
                actualgrades[7] = Integer.parseInt(tableActualGrades.getValueAt(i, tableActualGrades.getColumnCount() - 1).toString());    //these lines set the grades for the required standards

                stud.assignments.get(asspos).setGrades(actualgrades);

                FileOutputStream fo = new FileOutputStream(new File(System.getProperty("user.home")+"/StudentDataHub/Resources/Students/" + studfilename + ".txt"));
                ObjectOutputStream oo = new ObjectOutputStream(fo);

                oo.writeObject(stud);

                oo.close();
                fo.close();
            }
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "ERROR: " + e.getStackTrace()[0] +"; " + e.getStackTrace()[1], "Error", JOptionPane.ERROR_MESSAGE);
    }

Опять же, это не выдает никаких ошибок на моей машине, но при тестировании его дистрибутива на ма c он выдает эти ошибки, которые я не только не понимаю, но и пытаюсь решить как У меня нет мамы c.

Здесь - скриншот того, как выглядит таблица (я включил код только для одной из вкладок, но я это в основном один и тот же код с разными переменными для остальных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...