Javassist 热交换程序未找到类

标签 java javassist

我是第一次尝试使用 Javassist,但我被卡住了。我在默认包中有一个名为 standard 的类。我正在尝试使用 HotSwaper 重新加载它。我已经尝试过,但它不起作用。

public static void main(String[] args) throws Exception
{
    ClassPool pool = ClassPool.getDefault();
    CtClass clazz = pool.get("Standard");
    HotSwapper swap = new HotSwapper(8000);
    swap.reload("Standard", clazz.toBytecode());
}

这是我得到的错误

Exception in thread "main" java.lang.RuntimeException: no such class: Standard
at javassist.util.HotSwapper.toRefType(HotSwapper.java:189)
at javassist.util.HotSwapper.reload(HotSwapper.java:157)
at JavaHacks.main(JavaHacks.java:15)

我正在使用这些参数启动 jvm

agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

奇怪的是它加载类很好。

最佳答案

The weird part is it loads the class just fine.

您可能正在谈论 Javassist,但 Javassist 可以读取类文件这一事实并不意味着该类是由 JVM 类加载的。

您应该将代码更改为:

public static void main(String[] args) throws Exception {
    // Ensure Standard class classloading by creating an instance 
    // (calling a static method like Standard.init() would also do)
    Standard standard = new Standard();
    standard.doSomething();
    ClassPool pool = ClassPool.getDefault();
    CtClass clazz = pool.get("Standard");
    HotSwapper swap = new HotSwapper(8000);
    swap.reload("Standard", clazz.toBytecode());
}

这将确保Standard类已被类加载,因此可以重新加载。

关于Javassist 热交换程序未找到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251707/

相关文章:

java - perl Digest::MD5 md5($data) 和 java MessageDigest.getInstance ("MD5").digest($data) 的输出不同

使用 Javassist 的 Spring 框架项目中的 javassist.NotFoundException 错误 - 需要帮助了解如何设置类路径和类名

jaxb - javassist 不在现有字段中注入(inject)注释

java - 使用 javassist 修改在类构造函数中使用 getter 和 setter 的字段

arrays - Javassist CtMethod.make()使用空括号在数组初始化时给出 “syntax error”

java - 将参数保存在文件中

java - 如何使用android studio在java中获取这个数组的每个元素

java - 如何在加载类之前对其进行修改?

java - 在删除之前从 ConcurrentHashMap 窃取引用。正确性

java - 如何使用在另一个类中声明的变量?