我正在尝试从已签名的小程序加载外部资源(混合代码)时删除“阻止小程序”警告消息。
如果我现在离开applet,它会显示警告消息,点击“no block”会使applet正常工作。 另一方面,如果我只修改applet以将“Trusted-library:true”属性添加到清单文件中以接受未签名的外部资源,则会导致applet崩溃。
调试applet,我发现它在运行以下行时崩溃了:
ResourceBundle bundle = ResourceBundle.getBundle("conf/basic","en_EN");
抛出的异常是:
java.util.MissingResourceException:
Can't find bundle for base name conf/basic, locale en_EN
我已经检查过具有文件basic_en_EN.properties的conf文件夹与applet jar存在于同一级别(即使没有可信库也不会工作)
阅读Java 7 doc它说添加可信库应该可以解决混合签名/无符号代码问题,但事实并非如此。
此外,在Java 7 doc中,它没有提及有关ResourceBundle.getBundle()方法问题的任何内容,但它在Java 6 doc中有所说明:
要用Trusted-Library标记的jar文件中的代码 如果使用调用,可能需要稍微修改manifest属性 这是依赖于类加载器的,例如单参数版本 Class.forName(),Class.getResource()和 Class.getResourceAsStream(),一些变种 java.util.ResourceBundle.getBundle(),以及其他任何方法 相对于其直接调用者的定义加载器进行操作。变化 只有在找到所请求的类或资源时才需要进行 在jar文件中,它不是Trusted-Library(因此被加载 通过普通的Web Start或applet类加载器)。
即使我正在使用Java 7,我发现this post他们解释了在Java 6中替换getBundle()的方法。我已经尝试了它而没有任何结果。
我的清单文件是:
Manifest-Version: 1.0
Created-By: Company
Main-Class: src.applet.MyApplet
Class-Path: ./
Application-name: myApplet
Permissions: all-permissions
Trusted-Library: true
Caller-Allowable-Codebase: *
Application-Library-Allowable-Codebase: *
我用jdk和jre 7u45 / 7u51编译并测试了它,结果相同。
任何帮助或建议都会被贬低。