您好我正在尝试从Java Webstart应用程序中保存文件。
public class Main {
public static void main(String[] args) {
try {
FileSaveService fos = (FileSaveService) ServiceManager.lookup("javax.jnlp.FileSaveService");
//open Dialog
FileContents fc = fos.saveFileDialog("c:/data", null, new ByteArrayInputStream("Hallo Welt".getBytes()), "name.txt");
System.out.println("FileContents: " + fc);
} catch (UnavailableServiceException e) {
System.err.println("***" + e + "***");
} catch (IOException e) {
System.err.println("***" + e + "***");
}
//wait a minute
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
System.exit(0);
}
}
除了出现的对话框看起来像一个“打开”文件对话框,而不是像“保存”文件对话框一样,一切正常:
任何帮助都将不胜感激。
答案 0 :(得分:1)
文件打开对话框是必需的。首先需要让用户选择保存数据的位置。因此,对jnlp-application绝对需要先前调用openFileDialog。您不能直接保存到特定位置,例如c:
如果您按照上述链接(http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples.html#FileSaveService),您应该会成功。
编辑: 为了澄清。 通过javax.jnlp.FileSaveService保存确实需要一个调用。例如,调用saveFileDialog()就足够了:
fss.saveFileDialog(null, null, new ByteArrayInputStream("Hallo Welt".getBytes() ), "newFileName.txt");
一个用户对话的必要性是由于jnlp的匿名性,你的应用程序不应该对用户文件系统有任何暗示。 但是,我不得不承认,这不是你的问题。
你的主要麻烦来自java应用程序每次呈现“开放对话”而不是“保存对话”。
这不应该发生!如果我可以谦虚地假设你从你的代码片段中调用fos.saveFileDialog
:你刚刚用FileOpenService而不是FileSaveService来初始化fos吗?
有关FileSaveService的更多详细信息,请访问:http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/javax/jnlp/FileSaveService.html
答案 1 :(得分:0)
这似乎在JRE版本1.7.0_21-b11 Java HotSpot(TM)64位服务器VM中得到修复
它是:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=2227257