Beim erneuten Transformieren von Klassen wurde die Meldung "UnsupportedOperationException" angezeigt

JDK1.6, ändern Sie die in jvm geladene Klasse dynamisch. Wenn ich den Code kommentiere:classReader.accept(classAdapter, ClassReader.SKIP_DEBUG);, die Ausnahme"UnsupportedOperationException" verschwinden. Tatsächlich habe ich zum Testen meines Codes kein Feld oder keine Methode geändert. Aber das Programm fängt Ausnahme"UnsupportedOperationException", nach dem anrufretransformClasses(). Hat jemand eine ähnliche Ausnahme? Kann mir jemand einen Rat geben? Die Codes lauten wie folgt:

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

Antworten auf die Frage(0)

Ihre Antwort auf die Frage