Obtuve "UnsupportedOperationException" cuando intenté retransformar Clases

JDK1.6, modifique la clase cargada en jvm dinámicamente. Cuando comento el código:classReader.accept(classAdapter, ClassReader.SKIP_DEBUG);, La excepción"UnsupportedOperationException" desaparecer En realidad, para probar mi código, no modifiqué ningún campo ni método. Pero el programa captura la excepción"UnsupportedOperationException", despues de llamarretransformClasses(). ¿Alguien tiene una excepción similar? ¿Alguien me puede dar algunos consejos? Los códigos thx son los siguientes:

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;      
     }
}

|

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

Respuestas a la pregunta(0)

Su respuesta a la pregunta