Как победить Exception ConcurrentModificationException

168
28 июля 2018, 02:40

Пытаюсь парсить две таблицы одна в файле .xls вторая в .xlsx при помощи Apache POI.

С таблицей в .xls никаких проблем нет. А вот при работе со второй таблицей получаю:

ConcurrentModificationException

Вот пример кода обоих методов:

        public static void Xls(String name) {
            InputStream in = null;
            HSSFWorkbook wb = null;
            try {
                in = new FileInputStream(name);
                wb = new HSSFWorkbook(in);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //Таблица для чтения
            Sheet sheet = wb.getSheetAt(0);
            Iterator<Row> it = sheet.iterator();
            Processing proc = new Processing();
            //Сдвигаем строки вверх
            sheet.shiftRows(11, sheet.getLastRowNum(), -11);
            int rowID = 0;
            while (it.hasNext()) {
                int cellID = 0;
                Row row = it.next();
                //Таблица для записи
                Row newRow = sheet1.createRow(rowID);
                sheet1.setColumnWidth(0, 15000); //ширина столбца
                Iterator<Cell> cells = row.iterator();
                while (cells.hasNext()) {
                    Cell cell = cells.next();
                    Cell newCell = newRow.createCell(cellID);
                    //Выбираем какие имено столбцы парсить
                    if (cell.getColumnIndex() >= 2 && cell.getColumnIndex() <= 4) {
                        switch (cell.getCellTypeEnum()) {
                            case STRING:
                                newCell.setCellValue(cell.getStringCellValue());
                                cellID++;
                                break;
                            case NUMERIC:
                                double tmp = cell.getNumericCellValue();
                                newCell.setCellValue(tmp);
                                cellID++;
                                newCell = newRow.createCell(cellID);
                                newCell.setCellValue(proc.processing_opt(tmp));
                                cellID++;
                                newCell = newRow.createCell(cellID);
                                newCell.setCellValue(proc.processing_rozn(tmp));
                                cellID++;
                                break;
                            case FORMULA:
                                break;
                            default:
                                break;
                        }
                    }
                }
                rowID++;
            }
        }

        //Метод для создания прайса от AllSpare
        public static void Xlsx(String name, double currency) {
            InputStream inx = null;
            XSSFWorkbook wbx = null;
            try {
                inx = new FileInputStream(name);
                wbx = new XSSFWorkbook(inx);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //Таблица для чтения
            Sheet sheet = wbx.getSheetAt(0);
            Iterator<Row> it = sheet.iterator();
            Processing proc = new Processing();
            //Сдвигаем строки вверх
            sheet.shiftRows(11, sheet.getLastRowNum(), -11);
            int rowID = 0;
            while (it.hasNext()) {
                int cellID = 0;
                Row row = it.next(); **//Здесь ConcurrentModificationException**
                //Таблица для записи
                Row newRow = sheet2.createRow(rowID);
                sheet2.setColumnWidth(0, 15000); //ширина столбца
                Iterator<Cell> cells = row.iterator();
                while (cells.hasNext()) {
                    Cell cell = cells.next();
                    Cell newCell = newRow.createCell(cellID);
                    //Выбираем какие имено столбцы парсить
                    if (cell.getColumnIndex() == 2 | cell.getColumnIndex() == 4) {
                        switch (cell.getCellTypeEnum()) {
                            case STRING:
                                newCell.setCellValue(cell.getStringCellValue());
                                cellID++;
                                break;
                            case NUMERIC:
                                double tmp = cell.getNumericCellValue() / currency;
                                newCell.setCellValue(tmp);
                                cellID++;
                                newCell = newRow.createCell(cellID);
                                newCell.setCellValue(proc.processing_opt(tmp));
                                cellID++;
                                newCell = newRow.createCell(cellID);
                                newCell.setCellValue(proc.processing_rozn(tmp));
                                cellID++;
                                break;
                            case FORMULA:
                                break;
                            default:
                                break;
                        }
                    }
                }
                rowID++;
            }
        }
READ ALSO
Java spring + jpa + hibernate у одного владельца много объектов (ManyToOne и OneToMany)

Java spring + jpa + hibernate у одного владельца много объектов (ManyToOne и OneToMany)

Я использую spring + jpa + hibernate и мне нужно чтобы у объекта родителя (пользователь) было много потомков (заметок), следовательно я должен использовать...

168
Android TableLayout расстояние между столбцами

Android TableLayout расстояние между столбцами

В каждом tableRow находится 2 TextViewКак можно сделать промежуток между самым длинным первым TextView и вторым TextView

185
Прочитать fb2 в java (андроид устройства)

Прочитать fb2 в java (андроид устройства)

Хотел сделать Ридер книжек с форматом fb2 на планшет с четвёртым андроидом, и упёрся в проблему: а как прочитать этот формат? Можете подсказать...

158
В чем ошибка присвоения действия при нажатии на Маркер Google Maps?

В чем ошибка присвоения действия при нажатии на Маркер Google Maps?

только на третий-четвертый раз срабатывает действие, которое работает при нажатии на определенный маркер в Google MapsВ связи с чем такое происходит?...

174