0

我正在将 JFrame 转换为小程序并获得安全异常:

C:\prv_workspace_8\DungeonWorldAdventure\bin>appletviewer applet.html
java.security.AccessControlException: access denied ("java.net.SocketPermission"
 "www.student.nada.kth.se:80" "connect,resolve")
        at java.security.AccessControlContext.checkPermission(AccessControlConte
xt.java:366)
        at java.security.AccessController.checkPermission(AccessController.java:
555)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:456)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:203)
        at sun.net.www.http.HttpClient.New(HttpClient.java:290)
        at sun.net.www.http.HttpClient.New(HttpClient.java:306)

它正在尝试从 URL 读取图片:

// Load an image from the net, making sure it has already been
    // loaded when the method returns
    public Image loadPicture(String imageName) {
        Image im = null;

        // Load the image from the net
        try {
            URL imageSource = new URL(
                    "http://www.student.nada.kth.se/~d99-nro/" + imageName);

            try {
                im = createImage((ImageProducer) imageSource.getContent());
            } catch (IOException e) {
            }

        } catch (MalformedURLException e) {
        }

        // Wait to ensure that the image is loaded
        MediaTracker imageTracker = new MediaTracker(this);
        imageTracker.addImage(im, 0);
        try {
            imageTracker.waitForID(0);
        } catch (InterruptedException e) {
        }

        return im;
    }

知道我怎样才能完成这项工作吗?我需要一个java.policy文件吗?如果是这样,我如何使这个小程序在网页上工作?

4

1 回答 1

3

知道我怎样才能完成这项工作吗?

需要信任小程序才能跨域读取。无论是该文件还是允许跨域访问的外部服务器上特定位置的文件,我怀疑小程序查看器是否足够复杂以进行区分,因此最好在网页中对其进行测试。

有关跨域访问的更多详细信息,请参见:

我需要一个 java.policyfile 吗?

不,这在网络上部署是行不通的(不切实际),所以不值得追求。


我正在将 JFrame 转换为小程序..

使用Java Web Start 启动框架可能是一个更好的主意。将应用相同的安全限制,但自由浮动(可调整大小)框架通常更适合显示图像。它也不需要代码转换,并且通常更容易维护 - 小程序比 JWS 应用程序导致更多的维护麻烦。

我将使用 Java Web Start 来实现。我读到我可以让我的应用程序签名,然后它可以读取文件。不应该很容易吗?我看到其他开发人员无法让他们的小程序加载文件,然后建议他们使用签名小程序,也许 Java Web 启动有类似的东西?

基本上一样。如果在任何启动文件(一个JNLP,类似于appletHTML 中的元素但有更多选项)或任何请求扩展权限(有 3 个级别)的扩展(也是一个 JNLP)中引用了 Jar,则需要对它们进行数字签名或 JWS 中的权限)。

另一种选择是使用 JNLP API 文件服务从沙盒应用程序访问本地文件系统,但这需要更改代码。这是一个演示。的文件服务

于 2012-07-04T07:31:46.700 回答