遇到错误时尝试关注http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html。似乎getResource在IE6中本地访问页面时(即,当URL为"C:\projects\html\test.html"
时)返回null。类和资源在同一个Jar文件中。
任何人都知道原因和解决方法(如果存在)?
在Win XP / IE 6 / JRE 1.6.0_11中遇到,但在Win XP / IE 7 / 1.6.0-b105中没有。
在它工作的环境中,类加载器是:
sun.plugin.security.PluginClassLoader
在它破碎的环境中,它是:
sun.plugin2.applet.Applet2ClassLoader
答案 0 :(得分:2)
正如Nick所说,Java 6更新11改变了文件系统上运行的applet的安全设置。通过使用getResource(),您将从URL加载,并且可能意外地遇到了不应该真正适用于您的新限制。
尝试使用getResourceAsStream(),如下所示:
InputStream in = getClass().getResourceAsStream("image.jpg");
Image image = ImageIO.read(in);
ImageIcon icon = new ImageIcon(image);
我实际上没有对此进行测试,但我通常不会从文件系统运行applet:)
答案 1 :(得分:1)
听起来你在1.6u10中使用"next-generation" plugin technology的区别。您可以通过更改Java控制面板中“高级”选项卡下的相应选项来禁用它并使用旧的插件技术。这可能至少将您的问题与特定版本隔离开来。
答案 2 :(得分:1)
您是否在Java控制台中检查了消息?
据我所知,Internet Explorer 6的安全规则比旧的IE5或Netscape / Mozilla更严格。虽然Netscape允许从本地驱动器打开的applet访问该驱动器上的资源,但IE却没有。在这种情况下,您可能会在控制台中看到一些安全性异常。
解决方法设置本地网络服务器,例如Tomcat并通过它访问包含applet的html文件,例如http://127.0.0.1:8080/some/applet.html。然后,applet不再来自您的harddist,并且能够访问服务器http://127.0.0.1:8080/提供的任何资源。
答案 3 :(得分:0)
本地运行的安全设置非常严格,请参阅security report(类似问题here)。
正如另一个答案中所建议的那样,在网络服务器中运行它(例如tomcat),你的大多数问题都应该消失。
答案 4 :(得分:-1)
只是一个猜测:也许applet的安全限制在这里适用?通常,除非小程序未签名,否则不允许访问本地资源。如果从本地存储的页面打开applet,我不确定这是如何工作的,但它可能是根本原因。
在applet中签名接受浏览器中的证书可以解决问题。