【问题标题】:Java Applet Can't Access FilesJava Applet 无法访问文件
【发布时间】:2015-06-26 15:56:24
【问题描述】:

我正在尝试通过使用 HTML 文件的签名 jar 启动 Java Applet。当我从 Netbeans 运行小程序时,它运行良好,但我知道这是因为小程序上的安全限制。我收到的错误消息与程序需要对特定文件的读取权限有关。

在网上搜索后,我发现 doPrivileged() 应该用于这种行为,所以我在我的代码中添加了它,但我仍然收到错误消息。

HTML -

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Launch Applet</title>
<body>
<tr>
<td><center>
    <applet
        archive=widget.jar
        code=widget.class
        width=1100
        height=1100>  
    </applet>
</center></td>
</body>

Java 中的函数 -

class OpenThread implements Runnable{
    public void run(){
        try {
            AccessController.doPrivileged(new PrivilegedAction<Object>() {
                public Object run() {
                    if(new File(path+"\\loadFile.txt").exists()){
                         System.out.println("true");
                    }
                     return null;
                }
            }); 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

出于调试目的,我修剪了线程,最终txt文件将再次在代码中使用。我不确定我的 JAR 文件是否签名不正确,jar 中的 MANIFEST 文件是否应该包含文件权限,或者我是否必须编辑我的 java.policy 文件。有什么想法吗?

【问题讨论】:

  • "..需要对特定文件的读取权限。" 这个“特定文件”是由您还是最终用户提供的?它是只读的还是用于读/写的?另外——为什么要编写小程序?如果是老师指定的,请参考Why CS teachers should stop teaching Java applets
  • 这不是老师的作业。我需要将 Java 应用程序嵌入到 Web 浏览器中,并且我假设小程序是这样做的唯一方法。

标签: java html japplet


【解决方案1】:

您有两个基本选择。您可以创建一个策略文件,授予小程序访问本地文件系统的权限。这里有详细教程:

http://docs.oracle.com/javase/tutorial/security/tour1/index.html

您的另一个选择是使用 JNLP 启动小程序。这将使您能够访问本地计算机上的各种资源。这是最短路径。

【讨论】:

  • 我需要将我的小程序嵌入到浏览器中,所以我不确定策略文件路由是否可以避免。我已经使用提供的链接中的工具生成了策略文件,当我从命令行运行 appletviewer 时使用“Djava.security.policy=policyfilename”时,我仍然得到相同的结果。我是否错误地合并了策略文件?
  • 好久不见!我唯一能想到的是找不到策略文件。我记得 java 默认会在你的主目录中查找,你可以使用 -Djava.security.policy=policyfilepath 指定位置
  • 这成功了!现在调试其余的代码。谢谢!
  • 我接受了这个答案,尽管在我获得更多声望之前我无法加分。
  • 我会推你上路的!
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 2014-01-09
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多