1

我需要在 MAC 上安装 .dmg 时传递命令行参数,为此我使用了 JNLP,它使用 JSP 动态组合,响应内容类型为application/x-java-jnlp-file. JSP的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://10.40.42.134:8080/TestJNLP/">
 <information>
    <title>jnlp.JSP</title>
    <vendor>Sun Microsystems, Inc.</vendor>
 </information>
 <resources>
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="lib/faren2.jar" main="true" />
 </resources>
 <application-desc name="Dynamic Tree Demo Application" main-class="org.Test" width="300" height="300">
    <argument><%=request.getParameter("arg1")%></argument>  
    <argument><%=request.getParameter("arg2")%></argument> 
 </application-desc>
 <security>
    <all-permissions/>
 </security>
</jnlp>

使用我传递的参数正确调用了 JNLP。

现在有两个问题进一步发展:

首先,在触发 JNLP 后,我的主类调用saveFileDialogfromFileSaveService以将 .dmg 保存在用户系统上,但 JNLP 客户端(在 MAC 上打开的保存对话框)忽略了我在调用该方法时传递的名称和扩展名。我们如何让 JNLP 客户端尊重我传递的名称和扩展名?

其次,我如何知道用户保存 .dmg 的路径,以便我可以通过编程方式挂载它?了解用户保存文件的路径非常重要。

4

1 回答 1

2

我认为这是不可能的FileSaveService

路径和扩展参数saveFileDialog只是提示。实现可以随意忽略它们。

FileContents.getName()只会告诉你名称,而不是目录。这是设计使然。依赖的 JNLP 应用程序FileSaveService被认为是不受信任的,并且路径可能是一个隐私问题。如果我选择将 DMG 文件保存在名为的目录中,C:\Users\S_Rushdie\My Documents\Porn我可能不希望您的程序将其包含在稍后上传到您的服务器的日志中。

If you need greater control, I think you will need to sign your app, grant it <all-permission/> and use a JFileChooser and FileOutputStream instead.

于 2012-06-19T13:11:41.793 回答