ZBLOG

@FXML private void confirmExcel2(ActionEvent event) { System.out.println("读取文件map=>>>>>> " + map); String zhu = map.get("zhu"); String fujian = map.get("fujian"); St

在代码中创建了一个新的线程来执行Task,所以mytask只会执行一次。为了解决这个问题,可以将创建和执行Task的代码移到主线程中,如下:

@FXML private void confirmExcel2(ActionEvent event) {

System.out.println("读取文件map=>>>>>> " + map);

String zhu = map.get("zhu");
String fujian = map.get("fujian");
String fileName = map.get("fileName");

long start = System.currentTimeMillis();

// 显示进度条
progressBar.setVisible(true);

// 主文件
File file = new File(zhu, fileName);
if (!file.exists()) {
    System.out.println("路径下没有文件!");
    return;
}
try {
    // 子文件
    System.out.println("batchUploadFilePath=> {}" + fujian);
    File sheetFile = new File(fujian);
    File[] sheetFiles = sheetFile.listFiles();
    if (sheetFiles.length == 0) {
        System.out.println("发现目录下未存在子附件!");
        return;
    }
    Task<Void> task = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            double total = (double) sheetFiles.length;
            double progress = 0;

            for (File sfile : sheetFiles) {
                // 获取sfile的数据
                ExportPojo exportPojo = ImportExcelUtils.importExcelToSheet(sfile.getPath(), ExcelPojo.class);
                // 写出到指定文件
                ImportExcelUtils.exportDataToSheet(file, exportPojo, zhu, fileName);

                // 手动更新进度条
                progress++;
                updateProgress(progress, total);
            }
            return null;
        }
    };

    // 绑定进度条的属性
    progressBar.progressProperty().bind(task.progressProperty());

    task.setOnSucceeded(event1 -> {
        progressBar.setVisible(false);
        // 关闭当前窗口或程序
        Stage stage = (Stage) progressBar.getScene().getWindow();
        stage.close();

    });

    // 执行Task
    new Thread(task).start();

} catch (Exception e) {
    //  提醒框
    Alert alert = new Alert(Alert.AlertType.ERROR);
    alert.setTitle("错误");
    alert.setHeaderText("发生错误");
    alert.setContentText("出现了一个错误,请联系管理员。");
    alert.showAndWait();
    throw new RuntimeException(e);
}

Long time = System.currentTimeMillis() - start;
System.out.println("time = " + time);

}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=189

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?