Получение ошибки с Apachi POI в Java 10

Я сделал парсер, который читает таблицы Excel с помощью apache poi с java 9, и моя программа работает нормально, когда я экспортирую его в файл jar и запускаю на своем компьютере. Однако, когда я пытаюсь запустить программу с использованием Java 10, я получаю кучу ошибок, и он не читает файл вообще.

ошибка

Ошибка продолжается

Структура проекта

Я использую последнюю версию apache poi, и когда я запускаю приложение в java 9, я получаю предупреждающие сообщения, но программа по-прежнему работает без проблем. Это мои методы, которые я использую для создания файлов и передачи файла в метод open.

 @FXML
public void handleFileButtonClick() throws Exception {
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Please Select a SpreadSheet");
    FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Excel files (*.xlsx)", "*.xlsx");
    fileChooser.getExtensionFilters().add(extFilter);
    File file = fileChooser.showOpenDialog(mainGridPane.getScene().getWindow());
    if (file != null) {
        open(file);
    } else {
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("File Not Found");
        alert.setContentText("File was not found or cannot be read.");
        alert.showAndWait();
    }

}

  private void open(File file) throws Exception {
    XSSFWorkbook workbook = new XSSFWorkbook(file);
    XSSFSheet spreadSheet = workbook.getSheetAt(0);
    Iterator<Row> rowIterator = spreadSheet.iterator();
    rowIterator.next();
    rowIterator.next();
    rowIterator.next();
    rowIterator.next();
    rowIterator.next();

    while (rowIterator.hasNext()) {
        row = (XSSFRow) rowIterator.next();
        Iterator<Cell> cellIterator = row.cellIterator();
        Job job = new Job();

        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            DataFormatter dataFormatter = new DataFormatter();
            String cellStringValue = dataFormatter.formatCellValue(cell);
            switch (cell.getColumnIndex()) {
                case 0:
                case 1:
                    break;
                case 2:
                    if (!cellStringValue.equals("")) {
                        String[] date = cellStringValue.split("/");
                        LocalDate newDate = LocalDate.of(2000 + Integer.parseInt(date[2]), Integer.parseInt(date[0]), Integer.parseInt(date[1]));
                        job.setStartDate(newDate);

                    }
                    break;
                case 3:
                    if (!cellStringValue.equals("")) {
                        String[] date2 = cellStringValue.split("/");
                        LocalDate newDate2 = LocalDate.of(2000 + Integer.parseInt(date2[2]), Integer.parseInt(date2[0]), Integer.parseInt(date2[1]));
                        job.setEndDate(newDate2);
                    }
                    break;
                case 4:
                    if (!cellStringValue.equals("")) {
                        job.setTotalDaysPaid(Integer.parseInt(cellStringValue));
                    }
                    break;
                case 5:
                    break;
                case 6:
                    if (!cellStringValue.equals("")) {
                        String[] date3 = cellStringValue.split("/");
                        LocalDate newDate3 = LocalDate.of(2000 + Integer.parseInt(date3[2]), Integer.parseInt(date3[0]), Integer.parseInt(date3[1]));
                        job.setNextYearStart(newDate3);
                    }

                    break;
                case 7:
                    if (!cellStringValue.equals("")) {
                        String[] date4 = cellStringValue.split("/");
                        LocalDate newDate4 = LocalDate.of(2000 + Integer.parseInt(date4[2]), Integer.parseInt(date4[0]), Integer.parseInt(date4[1]));
                        job.setNextYearEnd(newDate4);
                    }
                    break;
                default:
                    break;
            }
        }
        if (job.getStartDate() != null) {
            jobs.add(job);
        }
    }
    workbook.close();
}

2 ответа

Согласно: https://poi.apache.org/faq.html "24. Может ли Apache POI быть скомпилирован / использован с Java 10 или новее? Apache POI еще не полностью поддерживается в Java 10 или новее. Бинарные форматы (.xls, .doc, .ppt, ...) в основном должны работать, но, к сожалению, чтение новых форматов на основе XML (.xlsx, .docx, pptx, ...) нарушается изменением Обработка ZIP-файлов в Java 10, подробности и новейшее состояние см. В сообщении об ошибке 62187."

Я думаю, что вы нашли ошибку, вам придется немного покопаться в ее статусе.

Другие вопросы по тегам