是否可以关闭/覆盖java.lang.SecurityException: Prohibited package name
?
我需要扩展AffineTransform
在某些缺乏功能的情况下实现的类,并且我需要访问m00, m01, ...
定义为包保护的成员。
是否可以关闭/覆盖java.lang.SecurityException: Prohibited package name
?
我需要扩展AffineTransform
在某些缺乏功能的情况下实现的类,并且我需要访问m00, m01, ...
定义为包保护的成员。
不,你不能。它在 java.lang.ClassLoader 中硬编码:
if ((name != null) && name.startsWith("java.")) {
throw new SecurityException
("Prohibited package name: " +
name.substring(0, name.lastIndexOf('.')));
...
如您所见,没有选择
您可以使用getMatrix(double[] flatmatrix)读取值。没有对应setMatrix
的,但是有AffineTransform(double[] flatmatrix)构造函数。
出于好奇,您所指的“缺乏功能”是什么?
更新:
喔好吧。Java2D 实际上只是用于基本的 2D 转换。对于任何涉及深度的内容,您可能需要查看一些 Java / OpenGL 绑定。
更新 2:
另一个要检查的库是Java Advanced Imaging (JAI) API。可能的缺点是没有积极维护;最后更新于 2006 年。它完全专注于图像,因此您需要:
BufferedImage
NullOpImage
从中创建一个PerspectiveTransform
这NullOpImage
BufferedImage
正如Evgeniy指出的那样,检查是在 ClassLoader 中硬编码的,因此要规避这一点并非易事。但总有一个选择:-)
可以在启动时使用Java bootclasspath选项或实现javaagent以进行自己的改进。问题不在于它是否可行,而在于这在工作量和整体维护方面是否是最明智的解决方案。
但是请注意,由于这会引入潜在的安全漏洞,因此对于 Applet 等,两者都无法做到。