我最近想创建自己的GregorianCalendar
副本,添加一些System.out.println
来帮助我了解它的工作原理。我复制了源并重命名了该类,但由于源引用了其他类中的包私有名称,因此无法编译。所以我尝试将package java.util;
添加到源代码并将其放在我的工作目录的java\util
子目录中。我得到了编译的程序,但它正在抛出java.lang.SecurityException: Prohibited package name: java.util
。
在阅读有关安全性的教程后,我尝试运行policytool
以允许自己在java.util
中定义一个类。我现在有一个文件policy1
,如下所示:
grant {
permission java.lang.RuntimePermission "defineClassInPackage.java.util";
};
(加上不要编辑评论)。这是在我的工作目录中,与我的测试程序相同。我跑了(在命令提示符窗口中):
java -Djava.security.manager -Djava.security.policy=policy1 Test35
但它仍然没有用。
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:659)
at java.lang.ClassLoader.defineClass(ClassLoader.java:758)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at Test35.main(Test35.java:13)
我做错了什么,或者错过了一步?