8

您好我正在尝试从 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);
   }
}

一切正常,除了出现的对话框看起来像“打开”文件对话框,而不像“保存”文件对话框:

文件对话框

任何帮助,将不胜感激。

4

2 回答 2

1

文件打开对话框是必要的。您首先需要让用户选择保存数据的位置。因此,对于 jnlp 应用程序,之前对 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

于 2013-05-27T22:11:56.473 回答
0

这似乎在 JRE bersion 1.7.0_21-b11 Java HotSpot(TM) 64-Bit Server VM 中得到修复

它就是:http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=2227257

于 2013-05-29T18:51:08.507 回答