Frage

Ich erhalte Stapel Spuren wie folgt aus:

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

Was sind GeneratedMethodAccessor1, GeneratedMethodAccessor2, GeneratedMethodAccessorN und was vielleicht verursachen sie nicht gefunden werden? Ich mache ein paar Byte-Code zur Laufzeit umgeschrieben, sondern nur vor der Klasse geladen wird, und die ersten Anrufe durch Reflexion funktionieren. Ich frage mich, ob dies geschieht, nachdem der JIT-Compiler einen Einfluß von meinem Code bekommt, aber ich habe nicht einmal eine sehr gute Vorstellung davon, wie diese starten Debuggen.

War es hilfreich?

Lösung

GeneratedMethodAccessor### sind Klassen zur Laufzeit durch die Reflexion Implementierung generierten Methoden und Konstrukteuren zu nennen. Diese bilden eine Brücke von Bytecode-Instanzen von Method oder Constructor der tatsächlichen Methode oder Konstruktor. Weitere Informationen finden Sie im Quellcode zur Verfügung.

Deserialisation tut auch etwas ähnliches, die zum Teil den gleichen Mechanismus zu teilen, die am meisten abgeleitete Nicht-Serializable Konstruktor aufzurufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top