使用Javassist编辑JFrame类时出错

使用Javassist编辑JFrame类时出错,java,bytecode,javassist,Java,Bytecode,Javassist,我正在使用Javassist在运行时编辑JFrame类(添加一个新的构造函数) 不幸的是,这会抛出一个IllegalAccessError 线程“main”javassist.cannotcompileeException:by java.lang.IllegalAccessError:类javax.swing.JFrame无法访问其上级接口javax.swing.TransferHandler$HasgettTransferHandler 位于javassist.ClassPool.toCla

我正在使用Javassist在运行时编辑
JFrame
类(添加一个新的构造函数)

不幸的是,这会抛出一个
IllegalAccessError

线程“main”javassist.cannotcompileeException:by java.lang.IllegalAccessError:类javax.swing.JFrame无法访问其上级接口javax.swing.TransferHandler$HasgettTransferHandler 位于javassist.ClassPool.toClass(ClassPool.java:1120) 位于javassist.ClassPool.toClass(ClassPool.java:1063) 位于javassist.ClassPool.toClass(ClassPool.java:1021) 位于javassist.CtClass.toClass(CtClass.java:1259) 位于io.github.potatophil.PSStart.compile(PSStart.java:46) 位于io.github.potatophil.PSStart.main(PSStart.java:24)
原因:java.lang.IllegalAccessError:class javax.swing.JFrame无法访问其超级接口javax.swing.TransferHandler$HasgettTransferHandler 位于java.lang.ClassLoader.defineClass1(本机方法) 位于java.lang.ClassLoader.defineClass(ClassLoader.java:760) 位于java.lang.ClassLoader.defineClass(ClassLoader.java:642) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:497) 位于javassist.ClassPool.toClass2(ClassPool.java:1133) 位于javassist.ClassPool.toClass(ClassPool.java:1114) ... 10多


我尝试使用了
pool.importPackage()
,但没有效果。

您遇到的问题与包专用包的运行时定义有关


Javassist无法将类注入负责Swing的引导类装入器中。相反,它将把修改过的类注入到系统类路径中。这个加载的类继承自一个包私有类,但是它是由引导类加载程序“自然”加载的。根据定义,此包是不同的运行时包,因此其实现类无法访问,从而导致非法访问错误。

您遇到的问题与包专用包的运行时定义有关


Javassist无法将类注入负责Swing的引导类装入器中。相反,它将把修改过的类注入到系统类路径中。这个加载的类继承自一个包私有类,但是它是由引导类加载程序“自然”加载的。根据定义,此包是不同的运行时包,因此其实现类无法访问,从而导致非法访问错误。

您遇到的问题与包专用包的运行时定义有关


Javassist无法将类注入负责Swing的引导类装入器中。相反,它将把修改过的类注入到系统类路径中。这个加载的类继承自一个包私有类,但是它是由引导类加载程序“自然”加载的。根据定义,此包是不同的运行时包,因此其实现类无法访问,从而导致非法访问错误。

您遇到的问题与包专用包的运行时定义有关


Javassist无法将类注入负责Swing的引导类装入器中。相反,它将把修改过的类注入到系统类路径中。这个加载的类继承自一个包私有类,但是它是由引导类加载程序“自然”加载的。根据定义,此包是不同的运行时包,因此其实现类无法访问,从而导致非法访问错误。

为什么要这样做?这就像在门已经打开的时候,用推土机试图打开一扇小门。在添加该构造函数之后,将不会有代码调用它,因此您也必须生成该代码。那么,为什么不生成只使用现有构造函数的代码,然后在框架上生成
setSize(…)
?除了让您的代码效率低下且无法维护之外,您认为该构造函数的优点是什么?为什么要这样做?这就像在门已经打开的时候,用推土机试图打开一扇小门。在添加该构造函数之后,将不会有代码调用它,因此您也必须生成该代码。那么,为什么不生成只使用现有构造函数的代码,然后在框架上生成
setSize(…)
?除了让您的代码效率低下且无法维护之外,您认为该构造函数的优点是什么?为什么要这样做?这就像在门已经打开的时候,用推土机试图打开一扇小门。在添加该构造函数之后,将不会有代码调用它,因此您也必须生成该代码。那么,为什么不生成只使用现有构造函数的代码,然后在框架上生成
setSize(…)
?除了让您的代码效率低下且无法维护之外,您认为该构造函数的优点是什么?为什么要这样做?这就像在门已经打开的时候,用推土机试图打开一扇小门。在添加该构造函数之后,将不会有代码调用它,因此您也必须生成该代码。那么,为什么不生成只使用现有构造函数的代码,然后在框架上生成
setSize(…)
?除了让你的代码既低效又不可维护之外,你认为这个构造函数的优点是什么?我只想说声谢谢。我在本地遇到了这个问题,并声明我的接口是tr
 ClassPool pool = ClassPool.getDefault();
 pool.importPackage("javax.swing.TransferHandler$HasGetTransferHandler");
 CtClass jFrameClass= pool.get("javax.swing.JFrame");
 jFrameClass.addConstructor(CtNewConstructor.make(new CtClass[]{pool.get("java.lang.String"),CtClass.intType,CtClass.intType},new CtClass[0],"{this($1);setSize($2,$3);}",jframe));
 jFrameClass.toClass();