我正在将一个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文件吗?如果是这样,我如何使这个小程序在网页上工作?
发布于 2012-07-04 15:31:47
你知道我该怎么做吗?
需要信任小程序才能跨域读取。不管是这样,还是在允许跨域访问的外部服务器上的特定位置上的文件,我怀疑applet查看器是否足够复杂,能够做出区分,所以最好在网页中测试它。
有关跨域访问的详细信息,请参阅:
我需要java.policyfile吗?
不是的。这在网络上部署是行不通的(不切实际的),所以不值得追求。
我正在将JFrame转换为applet..
使用Java Web Start启动框架可能是一个更好的主意。将应用相同的安全限制,但自由浮动(&可调整大小)框架通常更适合显示图像。它也不需要代码转换,而且通常更容易维护-小应用程序比JWS应用程序造成更多的维护麻烦。
我将使用Java Web Start来实现它。我读到我可以让我的应用程序签名,然后它就可以读取文件了。这不是很简单吗?我看到其他开发人员在让他们的applet加载文件时遇到了问题,然后他们被推荐使用签名applet,也许Java Web start也有类似的东西?
几乎一样。如果在任何启动文件( JNLP,类似于HTML中的applet元素,但具有更多选项)或任何请求扩展权限(在JWS中有3个级别或特权)的扩展(也是JNLP)中引用Jar,则需要对它们进行数字签名。
另一种替代方法是使用JNLP API文件服务从沙箱应用程序访问本地文件系统,但这需要更改代码。这是一个demo. of the file services。
https://stackoverflow.com/questions/11323621
复制相似问题