Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 得到;“不支持操作异常”;当尝试重新传输表单类时_Java_Jvm_Aop_Cglib_Jvmti - Fatal编程技术网

Java 得到;“不支持操作异常”;当尝试重新传输表单类时

Java 得到;“不支持操作异常”;当尝试重新传输表单类时,java,jvm,aop,cglib,jvmti,Java,Jvm,Aop,Cglib,Jvmti,JDK1.6,动态修改jvm中加载的类。当我注释代码时:classReader.accept(classAdapter,classReader.SKIP\u DEBUG),异常“UnsupportedOperationException”解除。 实际上,为了测试我的代码,我没有修改任何字段或方法。但是,在调用retransformClasses()之后,程序捕获异常“UnsupportedOperationException”。有人有类似的例外吗?有人能给我一些建议吗?谢谢 代码如下: publ

JDK1.6,动态修改jvm中加载的类。当我注释代码时:
classReader.accept(classAdapter,classReader.SKIP\u DEBUG),异常
“UnsupportedOperationException”
解除。 实际上,为了测试我的代码,我没有修改任何字段或方法。但是,在调用
retransformClasses()
之后,程序捕获异常
“UnsupportedOperationException”
。有人有类似的例外吗?有人能给我一些建议吗?谢谢 代码如下:

public byte[] modifySleepMethod() throws Exception {
     System.out.println("Call modifySleepMethod");
     ClassReader classReader = new ClassReader(classfileBuffer);
     System.out.println("new classreader");
     ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
     System.out.println("new classwriter");
     ClassAdapter classAdapter = new ModifyMethodClassAdapter(classWriter);

     classReader.accept(classAdapter, ClassReader.SKIP_DEBUG);

     byte[] classFile = null;
     classFile = classWriter.toByteArray();

     FileOutputStream fos;
     try {
        fos = new FileOutputStream("D:\\testfos\\b\\Example2.class");
        System.out.println("ddddddmodifymethodtest");
        fos.write(classFile);
        fos.close();
     } catch (FileNotFoundException e) {
        e.printStackTrace();
     }catch (IOException e) {
        e.printStackTrace();
     }
     return classFile;      
     }
}
|

protectedvoid转换(类clazz,类加载器){
DemoTransformer dt=新的DemoTransformer(clazz.getName(),classLoader);
仪表。添加变压器(dt,真值);
试一试{
仪器仪表.重传类(clazz);
}捕获(例外情况除外){
抛出新的RuntimeException(“未能转换[”+clazz.getName()+“]”,ex);
}

是否检查了
isRetransformClassesSupported()
返回的内容?是的,
isRetransformClassesSupported()
isRetransformClassesSupported()
,以及
isModifiableClass(clazz)
all return true。我的ASM代码有什么问题吗?我想在方法中添加一行。应该允许这样做。有人能给我一些建议吗?@Eugene KuleshovWell,我是Java的新手,当然是JVM,ASM。我犯了一个愚蠢的错误,在我的ASM代码中向目标类添加了一个不支持重新传输的字段在OracleJDK1.6中。所以有一个“UnsupportedOperationException”的异常。实际上是。我添加了一个字段,这是不允许的。
protected void transform(Class<?> clazz, ClassLoader classLoader) {
    DemoTransformer dt = new DemoTransformer(clazz.getName(), classLoader);
    instrumentation.addTransformer(dt, true);
    try {

        instrumentation.retransformClasses(clazz);

    } catch (Exception ex) {
        throw new RuntimeException("Failed to transform [" + clazz.getName() + "]", ex);
    }