java - JxBrowser 6.14.2 下载文件处理异常

标签 java file exception jxbrowser

目前,我使用 JxBrowser 6.14.2 来保存文件。然而,我发现默认的实现并不符合我的期望。

问题1 如果该文件存在,那么它似乎会覆盖上一个文件。文件并且不提示用户。 [通过以下代码解决]

问题2 更糟糕的是,如果文件正在打开,因此无法覆盖,则不会向用户发出警告。 [真正的问题]

因此,我实现了JxBrowser提供的DownloadHandler来解决问题1,如下:

browser.setDownloadHandler(new DownloadHandler() {
        @Override
        public boolean allowDownload(final DownloadItem download) {
            String downloadPath = download.getDestinationFile().getPath();
            final String fileType = Files.getFileExtension(downloadPath);

            JFileChooser fc = new JFileChooser() {
                @Override
                public void approveSelection() {
                    String filePath = getSelectedFile().getPath();
                    debug_log.debug("filePath = " + filePath);
                    File f = new File(filePath + "." + fileType);
                    if (f.exists() && getDialogType() == SAVE_DIALOG) {
                        int result =
                            JOptionPane.showConfirmDialog(
                                this, "override file ?", "override file ?",
                                JOptionPane.YES_NO_CANCEL_OPTION);
                        switch (result) {
                            case JOptionPane.YES_OPTION :
                                break;
                            case JOptionPane.NO_OPTION :
                                return;
                            case JOptionPane.CLOSED_OPTION :
                                return;
                            case JOptionPane.CANCEL_OPTION :
                                cancelSelection();
                                return;
                        }
                    }
                    download.setDestinationFile(f);
                    super.approveSelection();
                }
            };
            fc.setAcceptAllFileFilterUsed(false);
            fc.setMultiSelectionEnabled(false);
            fc.setFileFilter(new FileNameExtensionFilter("*." + fileType, fileType));
            int returnVal = fc.showSaveDialog(null);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                return true;
            }
            else {
                return false;
            }
        }
    });

但是,上面的代码只能解决问题1,不能解决问题2。

我期望 JxBrowser 抛出一些异常或至少一个 boolean 指示符来告诉我下载文件时出现错误,例如,指定要保存的文件路径当前正在打开,因此抛出异常。我需要做的是捕获 JxBrowser 在保存部分抛出的任何异常(例如 IOException),并告诉用户保存文件时出现错误。

希望有人能解决我的问题。

最佳答案

我已在本地环境中重现了此问题。 JxBrowser 确实不会像这样通知用户下载失败。 我在我们的问题跟踪系统中创建了一个适当的任务。我们将在下一个 JxBrowser 版本之一中实现此功能。当具有该功能的更新版本可供下载时,我会通知您。

同时,作为一种解决方法,您可以在allowDownload() 方法中注册的自定义DownloadListener 中跟踪下载状态。 在此监听器中,您可以分析 DownloadItem 状态。如果percentComplete为100并且isComplete标志为false,您可以等待,直到调用具有相同DownloadItem id的onDownloadUpdated()方法并且isComplete标志为true。如果在使用percentComplete=100检索到上一个DownloadItem后一段时间没有得到这样的DownloadItem,则意味着由于某种原因下载失败。

关于java - JxBrowser 6.14.2 下载文件处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45979483/

相关文章:

java - MyBatis:如何存储查询中的多个值?

java - JVM 会自动关闭文件吗?

c++ - 异常安全的 for 循环

python - xlsxwriter 模块无法正确打开/关闭 Excel 文件

android - 使用 Google Maps Android API v2 时出现错误签名无效。发现 :

java - 为什么在列表声明中添加 <?> 在从字符串列表转换为 double 列表时会导致错误?

java - 在 hyperjaxb 中自定义 hibernate 属性

java - Java 数据库抽象语言

c - ANSI C - 文本文件 : Modify Line?

java - 如何获取txt文件中的代码输出?