我正在学习本教程:
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());
}
}
我收到了用户取消的保存请求。
答案 0 :(得分:1)
您的主要问题是fileContents
可能是null
,而您无需了解它。这可能有两个原因:
用户取消了请求,因此saveFileDialog
会返回null
。这是您实际获得的消息,但您的错误来源可能不同;
错误可能来自saveFileDialog
的{{1}}的扩展名参数....如果引发异常,那么了解它会很好,所以我建议你在日志中添加一条消息(参见下面的代码)。
<强>解决方案:强>
您应该记录null
以跟踪异常,并且您应该尊重UnavailableServiceException
方法原型(以避免任何歧义),如下所述:FileSaveService Interface。
这是您的代码中应用之前建议的部分:
saveFileDialog
如果这不能解决您的问题,至少会提供有关其来源的更多信息。