当前位置: 首页 > 知识库问答 >
问题:

使用Javassist编辑JFrame类时出错

红朝
2023-03-14

我在运行时使用Java辅助编辑JFrame类,(添加一个新的构造函数)

 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();

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

线程"main"javaid中的异常。Cannot CompileExcema: byjava.lang.IllegalAccessError: classjavax.swing.JFrame无法访问其超接口javax.swing.TransferHandler$HasGetTransferHandler at jav辅助。ClassPool.to类(ClassPool.java:1120)。ClassPool.to类(ClassPool.java:1063)。ClassPool.to类(ClassPool.java:1021)。CtClass.to类(CtClass.java:1259)io.github.potatophil.PSStart.compile(PSStart.java:46)io.github.potatophil.PSStart.main(PSStart.java:24)
java.lang.IllegalAccessError:类javax.swing.JFrame无法访问其超级接口javax.swing.TransferHandler$HasGetTransferHandler在java. lang.在java. lang.在java. lang.java: 642)在sun.反射。nativemethod odAccessorImp. invke0(本机方法)在sun.反射。NativeMEDAccessorInp. invoke(NativeMEDAccessorInp. java: 62)在sun. reff。在java. lang.反射中调用(委托方法访问或执行. java: 43)。java: 497)在jav辅助。ClassPool. toClass2(ClassPool. java: 1133)at jav辅助。ClassPol. toClass(ClassPol. java: 1114)

我试过使用池。importPackage(),无效。

共有1个答案

胥良平
2023-03-14

您遇到的问题与包私有包的运行时定义有关。

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

 类似资料:
  • 我正在尝试使用Apache POI编辑包含数据的excel文件。我编写了以下代码: 当我运行代码时,当我尝试打开Excel文件时,会出现以下错误:“我们发现‘file.xlsx’中的某些内容有问题。您希望我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击是。” 如果我单击是,Excel确实会使用我指定的值进行更新;但是,我不希望出现此错误。我如何解决这个问题?

  • 问题内容: 我有一个运行良好的应用程序,它的JFrame是在GameInitializer类的构造函数中启动的,该类带有一些配置参数。我尝试创建一个GUI,在其中允许用户指定这些配置参数,然后单击“提交”。当用户单击提交时,将创建一个新的GameInitializer对象。我得到的错误是: 一旦提交被调用,将执行以下代码: 然后GameInitializer构造函数中的代码是: 它基本上是级联的,

  • 问题内容: 我要执行以下操作: 我已经尝试过了,但是它似乎并不总是可以工作。它在一个上下文中可以工作,但是在另一个上下文中,相同的代码在第二个“ Class.forName(” MyClass“)”上崩溃了…… 总是调用带来正确的课堂,并尝试过,但没有区别。不知何故,在某些情况下,第二个Class.forName找到了该类,而在其他情况下,它只是坏了……我错过了什么吗? 问题答案: 我发现我的代码

  • 我在使用上找到的wenzhixin引导表的可编辑扩展时遇到一些问题https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/editable.我刚刚决定使用此扩展,因为我在项目中已经将引导表用于其他目的。使用此可编辑扩展时,我在Chrome上遇到以下控制台错误: 我无法理解可能是什么问题。我试着在网站上查看文档和

  • 嗨,伙计们,我试图检索数据从我的数据库使用HQL编辑器查询。我遵循了示例“在JavaSwing应用程序中使用Hibernate”中的步骤。我的配置文件如下: 映射: 使用这个:或我得到以下错误: org.hibernate.exception.SQLGrammarExcture:无法在org.hibernate.exception.SQLStateConverter.convert(SQLStat

  • 本文向大家介绍javassist使用指南,包括了javassist使用指南的使用技巧和注意事项,需要的朋友参考一下 Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同