JNLP没有合作JFileChooser Access Denied

时间:2010-10-07 02:28:14

标签: java jnlp

我觉得自己很蠢......

所以我正在编写一个Java应用程序,如果你可以帮助我开始工作,你就能看到它。

所以我的jar文件在这里:http://team2648.com/OTIS2/admin/OmniNode2.8.jar

我希望它能够用作Java web-start应用程序,我在这里遵循教程:http://download.oracle.com/javase/tutorial/deployment/webstart/deploying.html

所以我按照指示编写了以下JNLP文件:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" 
codebase="http://team2648.com/OTIS2/admin" 
href="test.jnlp">
<information>
    <title>OmniNode Mapper</title>
    <vendor>Techplex Engineer</vendor>
</information>
<resources>
    <!-- Application Resources -->
    <j2se version="1.6+"
      href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="OmniNode2.8.jar" main="true" />

</resources>
<application-desc
     name="OmniNode Mapper"
     main-class="omninode28.Driver"
     width="300"
     height="300">
 </application-desc>
 <update check="background"/>
</jnlp>

但是你会看到你是否下载了jnlp http://team2648.com/OTIS2/admin/test.jnlp  并运行它,我们得到以下错误(在PC上):

access denied (java.io.FilePermission C:\Users\MyUserName\Documents read)

异常

java.security.AccessControlException:访问被拒绝(java.io.FilePermission C:\ Users \ Techplex Engineer \ Documents read)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    在java.security.AccessController.checkPermission(未知来源)
    在java.lang.SecurityManager.checkPermission(未知来源)
    在java.lang.SecurityManager.checkRead(未知来源)
    在java.io.File.exists(未知来源)
    在java.io.Win32FileSystem.canonicalize(未知来源)
    在java.io.File.getCanonicalPath(未知来源)
    at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Unknown Source)
    at sun.awt.shell.Win32ShellFolderManager2.getPersonal(Unknown Source)
    at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
    at sun.awt.shell.ShellFolder.get(Unknown Source)
    在javax.swing.filechooser.FileSystemView.getDefaultDirectory(未知来源)
    在javax.swing.JFileChooser.setCurrentDirectory(未知来源)
    在javax.swing.JFileChooser。(未知来源)
    在javax.swing.JFileChooser。(未知来源)
    在omninode28.NodePanel。(NodePanel.java:61)
     at omninode28.EditPanel。(EditPanel.java:31)
    在omninode28.Driver.main(Driver.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    在java.lang.reflect.Method.invoke(未知来源)
    at com.sun.javaws.Launcher.executeApplication(Unknown Source)
    at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
    在com.sun.javaws.Launcher.doLaunchApp(未知来源)
    at com.sun.javaws.Launcher.run(Unknown Source)
    在java.lang.Thread.run(未知来源)

所以它指向的那些文件:

这一行:fc = new JFileChooser();

因此,这让我相信我需要请求用户写入系统的权限。

我很困惑。 任何帮助都是超级的, 感谢

编辑... 我应该让用户直接下载Jar吗? 职业利弊?

3 个答案:

答案 0 :(得分:2)

您必须通过将此代码段添加到jnlp中来签署jar并授予对类的权限:

<security>
  <all-permissions/>
</security>

答案 1 :(得分:1)

显然,您浏览过的任何网站都可以从本地文件系统中读取,这是一个坏主意。所以不允许直接使用。

也许最好的解决方法是使用FileOpenService。这为应用程序提供了一个简单的接口,可以对某些描述的文件选择器进行打开(读取,不幸的是,写入)用户选择的文件,而无需直接访问文件系统。

答案 2 :(得分:0)

一种可能性是,您的jar未按提及here

签名