1

我在使用 JWS (Java Web Start) 访问文件时遇到了一些问题。该程序添加了一个新的标签和图像。该程序在我的本地计算机上运行良好,但是当我使用 JWS 在远程服务器上运行该程序时,给了我错误页面。这是错误的示例:

Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.io.FilePermission add2.png read)
 at java.security.AccessControlContext.checkPermission(Unknown Source)
 at java.security.AccessController.checkPermission(Unknown Source)
 at java.lang.SecurityManager.checkPermission(Unknown Source)

即使在确保图像具有读取权限之后也会发生这种情况。

想法?

4

4 回答 4

4

与小程序一样,JNLP (webstart) 在客户端机器上运行,而不是在服务器机器上运行。客户端从网页下载程序并在本地机器上运行。stuff 中的任何引用java.io都将指向本地磁盘文件系统(代码运行的地方),而不是您似乎期望的远程磁盘文件系统(代码下载的地方)。

您有 2 个选项:

  1. 将图像打包在 JAR 中,然后使用它ClassLoader#getResourceAsStream()来获取图像InputStream

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    BufferedImage image = ImageIO.read(classLoader.getResourceAsStream("add2.png"));
    
  2. 将图像放在网络服务器的公共位置,以便您可以通过 URL 访问它(仅比在类路径中慢一点)。

    BufferedImage image = ImageIO.read(new URL("http://example.com/add2.png"));
    

也就是说,无论如何,在 java.io 中使用相对路径而不是绝对路径是一个坏主意。永远不要这样做。它将取决于您无法控制的当前工作目录。

于 2010-02-17T18:07:21.487 回答
2

在哪里add2.png?如果它在您的本地文件系统上(而不是拥有该.jnlp文件的服务器),那么这是不允许的,以保护用户的隐私。此外,也不允许从另一个 Web 服务器获取资源。

请记住,JWS 和小程序代码通常是不受信任的(除非它已经过数字签名并被用户接受)。因此,应用于它们的默认权限必须相当严格。


编辑添加:从堆栈跟踪看来,您的程序仍在尝试读取本地文件,而不是使用远程服务器的 URL。确保您的代码没有对java.io.File;进行任何引用 这将帮助您查明任何有问题的代码区域。

于 2010-02-17T00:27:57.397 回答
0

面临类似的问题。

通过从控制面板-> Java 中删除临时 Internet 文件解决

于 2014-12-19T09:39:12.927 回答