1

我真的觉得很傻......

所以我正在编写一个 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)
在 java.security.AccessControlContext.checkPermission(Unknown Source)
在 java.security.AccessController.checkPermission(Unknown Source)
在java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.exists(Unknown Source)
at java.io.Win32FileSystem.canonicalize(Unknown Source)
at java. io.File.getCanonicalPath(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.getPersonal(Unknown Source)
在 sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
at sun.awt.shell.ShellFolder.get(Unknown Source)
at javax.swing.filechooser.FileSystemView.getDefaultDirectory(Unknown Source)
at javax.swing.JFileChooser.setCurrentDirectory (未知来源)
在 javax.swing.JFileChooser.(未知来源)
在 javax.swing.JFileChooser.(未知来源)
在 omninode28.NodePanel.(NodePanel.java:61)
在 omninode28.EditPanel.(EditPanel.java:31)
在 omninode28.Driver.main(Driver.java:25)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
在 java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher .doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

所以它指向的那些文件:

这一行: fc = new JFileChooser();

所以这让我相信我需要询问用户是否允许写入他们的系统。

我很困惑。任何帮助都会很棒,谢谢

编辑...我应该让用户直接下载 Jar 吗?优点缺点?

4

3 回答 3

3

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

<security>
  <all-permissions/>
</security>
于 2010-10-07T07:22:10.120 回答
1

显然,对于您浏览过的任何网站来说,能够从本地文件系统读取数据都是一个坏主意。所以不允许直接使用。

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

于 2010-10-07T03:02:59.433 回答
0

一种可能性是,您的 jar 没有像这里提到的那样签名

于 2010-10-07T02:33:27.393 回答