在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 后,我的主类从 FileSaveService
调用saveFileDialog
以将.dmg保存在用户系统上,但 JNLP 客户端(在 MAC 上打开的保存对话框)忽略了我在调用该方法时传递的名称和扩展名。我们如何使 JNLP 客户端尊重我传递的名称和扩展名?
其次,我如何知道用户保存.dmg的路径,以便以编程方式挂载它?知道用户保存文件的路径非常重要。
我认为这在FileSaveService
是不可能的.
saveFileDialog
的路径和扩展参数只是提示。 实现可以自由地忽略它们。
FileContents.getName()
只会告诉您名称,而不会告诉您目录。 这是设计使然。 依赖于FileSaveService
的 JNLP 应用被视为不受信任,路径可能是隐私问题。 如果我选择将DMG文件保存在名为C:UsersS_RushdieMy DocumentsPorn
的目录中,我可能不希望您的程序将其包含在稍后上传到服务器的日志中。
如果您需要更大的控制权,我认为您需要对您的应用程序进行签名,授予它<all-permission/>
并使用JFileChooser
和FileOutputStream
。