Я сделал парсер, который читает таблицы Excel с помощью apache poi с java 9, и моя программа работает нормально, когда я экспортирую его в файл jar и запускаю на своем компьютере. Однако, когда я пытаюсь запустить программу с использованием Java 10, я получаю кучу ошибок, и он не читает файл вообще.
![Error](https://i.stack.imgur.com/lNbGZ.png)
![Error Continued](https://i.stack.imgur.com/ZjF6u.png)
![Project Structure](https://i.stack.imgur.com/mZUUW.png)
Я использую последнюю версию 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();
}