You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让XSSFWorkbook报错时弹出JavaFX警告对话框而非输出到终端

问题解决:JavaFX中Excel读取异常未触发Alert弹窗

问题根源

你当前的代码只捕获了IOException,但终端抛出的是POIXMLException(以及底层的XmlException),这些异常不属于IOException的子类,所以没有被catch块捕获,导致错误直接输出到终端,Alert弹窗不会触发。另外还需要考虑用户取消文件选择时selectedFile为null的情况,这会引发NullPointerException。

修改后的代码

protected void uploadNames() {
    try {
        FileChooser fileChooser = new FileChooser();
        File selectedFile = fileChooser.showOpenDialog(stage);

        // 处理用户取消选择文件的情况
        if (selectedFile == null) {
            return;
        }

        FileInputStream file = new FileInputStream(selectedFile);
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet spreadsheet = workbook.getSheetAt(0);

        for (int i = 0; i < spreadsheet.getLastRowNum(); i++) {
            TextField textField = new TextField(spreadsheet.getRow(i).getCell(0).toString());
            textField.setEditable(false);
            namesList.getChildren().add(textField);
            arrayNamesList.add(textField);
            textField.setOnMousePressed(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    namesList.getChildren().remove(textField);
                    arrayNamesList.remove(textField);
                }
            });
        }
        // 关闭资源,避免内存泄漏
        workbook.close();
        file.close();
    } catch (IOException e) {
        showErrorAlert("文件读取错误", "无法读取所选文件:" + e.getMessage());
    } catch (POIXMLException e) {
        showErrorAlert("Excel格式错误", "所选文件不是有效的Excel文件:" + e.getMessage());
    } catch (Exception e) {
        // 捕获其他未预料的异常
        showErrorAlert("未知错误", "发生意外错误:" + e.getMessage());
    }
}

// 提取Alert创建逻辑,复用代码
private void showErrorAlert(String title, String content) {
    Alert alert = new Alert(Alert.AlertType.ERROR);
    alert.setTitle(title);
    alert.setHeaderText(null);
    alert.setContentText(content);
    alert.showAndWait();
}

关键修改点

  • 扩展异常捕获范围:新增POIXMLException捕获(针对Excel格式错误),以及兜底的Exception捕获,确保所有异常都能被处理。
  • 处理取消选择的情况:判断selectedFile是否为null,避免空指针异常。
  • 资源关闭:添加workbook.close()和file.close(),释放文件资源。
  • 复用Alert逻辑:将弹窗代码提取为单独方法,简化主代码,方便后续修改。
  • 友好错误信息:在Alert中显示具体异常信息,帮助用户定位问题。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:33:12