2009-06-21 20 views
8

Mi sto tracce dello stack in questo modo:Cosa sono GeneratedMethodAccessor1,2, ecc. E perché potrebbero non essere trovati?

java.lang.NoClassDefFoundError: sun/reflect/GeneratedMethodAccessor1 
    at sun.reflect.GeneratedMethodAccessor1.<clinit>(Unknown Source) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377) 
    at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:59) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:28) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at edu.tufts.cs.testsim.LogicalProcess.dispatchMessage(LogicalProcess.java:214) 
    at edu.tufts.cs.testsim.LogicalProcess.processForward(LogicalProcess.java:287) 
    at edu.tufts.cs.testsim.LogicalProcess.doOperation(LogicalProcess.java:423) 
    at edu.tufts.cs.testsim.LogicalProcess.run(LogicalProcess.java:434) 
    at java.lang.Thread.run(Thread.java:637) 
Caused by: java.lang.ClassNotFoundException: sun.reflect.GeneratedMethodAccessor1 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:316) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374) 
    ... 19 more 

Quali sono GeneratedMethodAccessor1, GeneratedMethodAccessor2, GeneratedMethodAccessorN e che cosa potrebbe causare loro di non essere trovato? Sto eseguendo la riscrittura dei codici byte in fase di esecuzione, ma solo prima che la classe venga caricata e le prime chiamate attraverso la reflection funzionino correttamente. Mi chiedo se questo accada dopo che il compilatore JIT ha acquisito il mio codice, ma non ho nemmeno una buona idea su come iniziare a eseguire il debug di questo.

risposta

7

GeneratedMethodAccessor### sono classi generate in fase di esecuzione dall'implementazione di reflection per chiamare metodi e costruttori. Questo modulo costituisce un bridge bytecode dalle istanze di Method o Constructor al metodo o costruttore effettivo. Ulteriori informazioni sono disponibili nel codice sorgente.

Anche la deserializzazione fa qualcosa di simile, condividendo alcuni degli stessi meccanismi, per invocare il costruttore non derivato più Serializable.

Problemi correlati