Question

Je reçois des traces de pile comme ceci:

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

Que sont GeneratedMethodAccessor1, GeneratedMethodAccessor2, GeneratedMethodAccessorN et qu'est-ce qui peut les empêcher de trouver? Je suis en train de réécrire du code octet au moment de l'exécution, mais seulement avant le chargement de la classe, et les premiers appels via la réflexion fonctionnent correctement. Je me demande si cela se produit après que le compilateur JIT ait récupéré mon code, mais je n'ai même pas une très bonne idée de la façon de commencer à déboguer cela.

Était-ce utile?

La solution

GeneratedMethodAccessor ### sont des classes générées au moment de l'exécution par l'implémentation de réflexion pour appeler des méthodes et des constructeurs. Cela forme un pont bytecode à partir d'instances de Méthode ou Constructeur vers la méthode ou le constructeur actuel. Plus d'informations sont disponibles dans le code source.

La désérialisation effectue également quelque chose de similaire, en partageant le même mécanisme, pour appeler le constructeur non dérivé le plus dérivé Serializable .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top