【问题标题】:JNLP FileSaveService opens a file open dialogJNLP FileSaveService 打开文件打开对话框
【发布时间】:2013-05-12 14:23:40
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 您可以将fss.saveFileDialog() 参数与here 显示的参数进行比较。
  • 我刚刚在 1.7.0_21-b11(Windows 32 位)中尝试了 File Service demo,打开和保存对话框按预期出现。用户运行的是什么品牌和型号的 JRE?
  • 我们使用的是 JRE 版本 1.6.0_31-b05 Java HotSpot(TM) 64-Bit Server VM
  • 我尝试了来自垃圾神链接的代码,结果相同。我使用了这个 JRE:Java Web Start 10.13.2.20 Using JRE version 1.7.0_13-b20 Java HotSpot(TM) 64-Bit Server VM
  • @AndrewThompson 你是对的,我应该早点检查最新的 JDK...

标签: swing jnlp java-web-start


【解决方案1】:

这似乎在 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

【讨论】:

    【解决方案2】:

    文件打开对话框是必要的。您首先需要让用户选择保存数据的位置。因此,对于 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 的 sn-p 谦虚地假设:您是否只是通过 FileOpenService 而不是 FileSaveService 初始化 fos?

    更多关于 FileSaveService 的细节可以在这里找到:http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/javax/jnlp/FileSaveService.html

    【讨论】:

    • 当我运行链接中示例中的代码时,我看到 3 次打开对话框。你看到了什么?
    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多