JNLP FileSaveService打开文件打开对话框

时间:2013-05-17 12:10:05

标签: swing jnlp java-web-start

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

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

FileDialog

任何帮助都将不胜感激。

2 个答案:

答案 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