Pregunta

Recibo rastros de pila como este:

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

¿Qué son GeneratedMethodAccessor1, GeneratedMethodAccessor2, GeneratedMethodAccessorN y qué puede estar causando que no se encuentren? Estoy haciendo una reescritura de código de bytes en tiempo de ejecución, pero solo antes de que se cargue la clase, y las primeras llamadas a través de la reflexión funcionan bien. Me pregunto si esto está sucediendo después de que el compilador JIT obtenga mi código, pero ni siquiera tengo una muy buena idea de cómo comenzar a depurar esto.

¿Fue útil?

Solución

GeneratedMethodAccessor ### son clases generadas en tiempo de ejecución por la implementación de reflexión para llamar a métodos y constructores. Esto forma un puente de bytecode desde instancias de Method o Constructor al método o constructor real. Hay más información disponible en el código fuente.

La deserialización también hace algo similar, compartiendo algunos de los mismos mecanismos, para invocar el constructor no derivado Serializable más derivado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top