Java Swing FileChooser错误

时间:2014-12-19 11:45:50

标签: java swing jfilechooser

我正在学习本教程:

http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

这样我就可以学习如何在我正在构建的GUI中使用文件选择器,但我下载的源文件与教程不匹配,每当我按下按钮时我都会收到错误消息GUI。

if (e.getSource() == saveButton) {
        FileSaveService fss = null;
        FileContents fileContents = null;
        ByteArrayInputStream is = new ByteArrayInputStream(
                (new String("Saved by JWSFileChooserDemo").getBytes()));
                                         //XXX YIKES! If they select an
                                         //XXX existing file, this will
                                         //XXX overwrite that file.

        try {
            fss = (FileSaveService)ServiceManager.
                      lookup("javax.jnlp.FileSaveService"); 
        } catch (UnavailableServiceException exc) { }

        if (fss != null) {
            try {
                fileContents = fss.saveFileDialog(null,
                                                  null,
                                                  is,
                                                  "JWSFileChooserDemo.txt"); 
            } catch (Exception exc) {
                log.append("Save command failed: "
                           + exc.getLocalizedMessage()
                           + newline);
                log.setCaretPosition(log.getDocument().getLength());
            }
        }

        if (fileContents != null) {
            try {
                log.append("Saved file: " + fileContents.getName()
                           + "." + newline);
            } catch (IOException exc) {
                log.append("Problem saving file: "
                           + exc.getLocalizedMessage()
                           + newline);
            }
        } else {
            log.append("User canceled save request." + newline);
        }
        log.setCaretPosition(log.getDocument().getLength());
    }
}

我收到了用户取消的保存请求。

1 个答案:

答案 0 :(得分:1)

您的主要问题是fileContents可能是null,而您无需了解它。这可能有两个原因:

  1. 用户取消了请求,因此saveFileDialog会返回null。这是您实际获得的消息,但您的错误来源可能不同;

  2. 错误可能来自saveFileDialog的{​​{1}}的扩展名参数....如果引发异常,那么了解它会很好,所以我建议你在日志中添加一条消息(参见下面的代码)。

  3. <强>解决方案: 您应该记录null以跟踪异常,并且您应该尊重UnavailableServiceException方法原型(以避免任何歧义),如下所述:FileSaveService Interface

    这是您的代码中应用之前建议的部分:

    saveFileDialog

    如果这不能解决您的问题,至少会提供有关其来源的更多信息。