Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
hallo habe folgende 2 Klassen. Ich möchte mit der Klasse TestR1 die Methoden von R3 aufrufen,
die werden zwar aufgerufen, doch ommt dann eine Fehlermeldung auf der Konsole... wieso?
Fehler lautet:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at TestR1.main(TestR1.java:17)
Caused by: java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:474)
... 5 more
Mit "Method.getDeclaringClass()" solltest du rausfinden können, welche Methoden von Object und welche von deiner eigenen Klasse kommen.
(Vielleicht würde sich hier auch Annotationen anbieten, ein kleines Flag vor jeder Methode die aufgerufen werden soll.)
um Annotation gehts doch die ganze Zeit, hast du die vorherigen Posts gelesen?
("ein kleines Flag vor jeder Methode die aufgerufen werden soll", wohl dieses "@Invoke")
komplett verstehen musst du das natürlich nicht,
wenn, dann erst nach dem lesen in entsprechenden Java-Bücher, das wird hier wohl kaum einer komplett wiederholen
(ich persönlich weiß davon nix )
wie gesagt gehts dabei um Java 5, nur in dieser hohen Version, die du wahrscheinlich nicht benutzt,
existieren Annotation und die Klasse Invoke
In diesem Fall würde das klappen. Allerdings liefert getDeclaredMethods eben alle deklarierten Methodem, unabhängig von ihrer Sichtbarkeit. Und wenn man dann aus einer anderen Klasse heraus eine "private" Methode aufrufen will, gibt es wieder eine Exception. Man müsste also noch entweder die Sichtbarkeit der Methode checken, oder mit java.lang.reflect.AccessibleObject die Sichtbarkeitsprüfungen aushebeln - was aber m.E. nur in absoluten Ausnahmefällen gerechtfertigt ist.
Zumindest kann ich mir nicht viele sinnvolle Anwendungsfälle vorstellen, stimmt schon. :wink:
Sollte es aber doch einmal notwendig sein, dann kann man mit AccessibleObject die Sichtbarkeitsprüfungen aushebeln (das kann z.B. für irgendwelche Serialisierungen sinnvoll sein), allerdings ist das eine Technik, die m.W. im J2EE-Bereich "verboten" ist.