Reflection-fehlermeldung

Status
Nicht offen für weitere Antworten.
L

looogi

Gast
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

Code:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestR1 {

	public static void main(String[] args) {

		try {
			Class c = Class.forName("R3");
			Object o = c.newInstance();

			Class clazz = o.getClass();
			Method[] methoden = clazz.getMethods();

			for (int i = 0; i < methoden.length; i++) {

				methoden[i].invoke(o, new Object[0]);
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}

	}

}

public class R3 {
		
		public void sagwas(){
			
			System.out.println("hallo von R3");
			
		}
        public void nochwas(){
			
			System.out.println("nochmal hallo");
			
		}
		
	}
 

André Uhres

Top Contributor
Du bekommst nicht nur die Methoden von R3, sondern auch die von Object geerbten Methoden,
von denen verursacht wait() das Problem.
 
B

Beni

Gast
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.)
 

Illuvatar

Top Contributor
Beni hat gesagt.:
(Vielleicht würde sich hier auch Annotationen anbieten, ein kleines Flag vor jeder Methode die aufgerufen werden soll.)

Um das (IMO schönste Version) näher zu erläutern: Annotations gibts erst seit Java5. Das sähe dann so aus:
Code:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.annotation.*;

public class TestR1
{
   public static void main(String[] args)
   {
      try {
         Class c = Class.forName("R3");
         Object o = c.newInstance();

         Class clazz = o.getClass();
         Method[] methoden = clazz.getMethods();

         for (int i = 0; i < methoden.length; i++) {
            if (methoden[i].getAnnotation(Invoke.class) != null){
              methoden[i].invoke(o);
            }
         }
         
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

class R3
{
      @Invoke
      public void sagwas()
      {
         System.out.println("hallo von R3");
      }
      @Invoke
      public void nochwas()
      {
         System.out.println("nochmal hallo");
      }
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Invoke{}
 
L

looogi

Gast
..danke für die antworten...

..nur verstehe ich nicht was
Code:
 getAnnotation(Invoke.class)

dies hier macht?


danke
 
L

looogi

Gast
.

. ja und außerdem erkennt eclipse die Klasse Invoke nicht !!
:(
 
S

SlaterB

Gast
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
 

Murray

Top Contributor
SlaterB hat gesagt.:
wie gesagt gehts dabei um Java 5, nur in dieser hohen Version, die du wahrscheinlich nicht benutzt,
existieren Annotation und die Klasse Invoke

Invoke ist eine Annotation (eine Art spezielles Interface), die Illuvatar in seinem Code definiert hat (die letzten Zeilen).
 
R

Roar

Gast
???:L du könntest auch einfach getDeclaredMethods() statt getMethods() benutzen, und alles funktinoiert
 

Murray

Top Contributor
Roar hat gesagt.:
???:L du könntest auch einfach getDeclaredMethods() statt getMethods() benutzen, und alles funktinoiert
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.
 
R

Roar

Gast
einfach alle methoden eines objekts aufzurufen ist auch nur in absoluten ausnahmefällen gerechtfertigt heh :bae:
 

Murray

Top Contributor
Roar hat gesagt.:
einfach alle methoden eines objekts aufzurufen ist auch nur in absoluten ausnahmefällen gerechtfertigt heh :bae:
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.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Reflection: Suche Feld + in Unterklassen Java Basics - Anfänger-Themen 7
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
G Vererbung Sicherheitslücke? Reflection sieht members, die nicht sichtbar sein sollten?! Java Basics - Anfänger-Themen 11
S reflection und felder Java Basics - Anfänger-Themen 12
B .class-File mit Reflection auslesen Java Basics - Anfänger-Themen 8
X Parameterübergabe per Reflection Java Basics - Anfänger-Themen 10
U Reflection Benutzung Java Basics - Anfänger-Themen 2
J Reflection Java Basics - Anfänger-Themen 6
B Reflection Java Basics - Anfänger-Themen 8
S Datentypen Reflection Cast anhand eines Strings? Java Basics - Anfänger-Themen 7
X reflection api Java Basics - Anfänger-Themen 5
R Alle Klassen ermitteln, die Interface implementieren / Reflection Java Basics - Anfänger-Themen 51
lumo java reflection Java Basics - Anfänger-Themen 7
J Reflection Java Basics - Anfänger-Themen 2
J Reflection Java Basics - Anfänger-Themen 3
P Reflection - Class Not Found Exception Java Basics - Anfänger-Themen 3
A Frage zu Reflection Java Basics - Anfänger-Themen 8
A abgeleitete Klassen mit Reflection holen Java Basics - Anfänger-Themen 2
M Reflection Java Basics - Anfänger-Themen 8
W Problem bezüglich reflection Java Basics - Anfänger-Themen 11
S verschiede constructoren über reflection Java Basics - Anfänger-Themen 3
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
JFeel-x Frage zu reflection Java Basics - Anfänger-Themen 12
J Reflection Basic Java Basics - Anfänger-Themen 26
C Reflection Exceptions behandeln Java Basics - Anfänger-Themen 6
T von Reflection zum Thread? Java Basics - Anfänger-Themen 5
G Vorteile Reflection bezüglich MVC-Pattern Java Basics - Anfänger-Themen 9
G Reflection - Klasse laden aus anderem Verzeichnis Java Basics - Anfänger-Themen 4
E Klassenaufrufe dynamisch mit Reflection Java Basics - Anfänger-Themen 4
S wer oder was ist reflection? Java Basics - Anfänger-Themen 11
Ronny123 Erste Schritte Fehlermeldung Java Basics - Anfänger-Themen 1
F Fehlermeldung in Eclipse Java Basics - Anfänger-Themen 13
AllBlack Fehlermeldung Java Basics - Anfänger-Themen 19
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
Ostkreuz Fehlermeldung Java Basics - Anfänger-Themen 1
_so_far_away_ Fehlermeldung "Index 2 out of bounds for length 2" Java Basics - Anfänger-Themen 7
W Texteingabe - Bedeutung Fehlermeldung, Lösung? Java Basics - Anfänger-Themen 18
krgewb Fehlermeldung in web.xml Java Basics - Anfänger-Themen 4
W Warum diese Fehlermeldung? Java Basics - Anfänger-Themen 12
nbergmann Unverständliche Fehlermeldung Java Basics - Anfänger-Themen 56
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
J Fehlermeldung im Checkstyle Java Basics - Anfänger-Themen 11
S Fehlermeldung Java Basics - Anfänger-Themen 7
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
C Fehlermeldung Array zuweisen und printen Java Basics - Anfänger-Themen 22
J Fehlermeldung Java Basics - Anfänger-Themen 22
J Fehlermeldung: A JNI error Java Basics - Anfänger-Themen 3
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
JavaClara Fehlermeldung bei split-Methode Java Basics - Anfänger-Themen 12
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
C Fehlermeldung InOut. Java Basics - Anfänger-Themen 7
B Methoden if-statement error, FX, Fehlermeldung Java Basics - Anfänger-Themen 6
A Fehlermeldung Java Basics - Anfänger-Themen 5
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
M Java heap space Fehlermeldung beheben Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
S Bitte Hilfe zu Fehlermeldung am Handy Java Basics - Anfänger-Themen 2
H fehlermeldung Java Basics - Anfänger-Themen 447
H fehlermeldung Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Fehlermeldung mit Intger. Java Basics - Anfänger-Themen 3
A Fehlermeldung Java Basics - Anfänger-Themen 3
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
H Fehlermeldung bei der Ausführung eines Compilierten PRGs Java Basics - Anfänger-Themen 9
N Fehlermeldung beim ausführen des Programmes.. Java Basics - Anfänger-Themen 3
x-tshainge Fehlermeldung Java Basics - Anfänger-Themen 2
M Erste Schritte NetBeans Fehlermeldung Java Basics - Anfänger-Themen 2
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
N Fehlermeldung bei Methode Java Basics - Anfänger-Themen 12
I String index out of range Fehlermeldung Java Basics - Anfänger-Themen 4
I Fehlermeldung bei Darstellung von Arrays Java Basics - Anfänger-Themen 2
S Variablen JLabel backImagePanel Fehlermeldung Java Basics - Anfänger-Themen 3
A checkstyle Fehlermeldung Java Basics - Anfänger-Themen 1
G Compiler-Fehler Fehlermeldung Java Basics - Anfänger-Themen 3
Pr0m3theus Fehlermeldung ArrayList add Java Basics - Anfänger-Themen 12
Arabicabohne Fehlermeldung bei Eclipse Java Basics - Anfänger-Themen 23
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
TheMenox Fehlermeldung / Arrays, Enhanced For Loops Java Basics - Anfänger-Themen 16
D Compiler-Fehler Anfänger Fehlermeldung Java Basics - Anfänger-Themen 3
Henri Fehlermeldung Java Basics - Anfänger-Themen 2
K Erste Schritte Fehlermeldung Java Basics - Anfänger-Themen 2
I Fehlermeldung: Java does not contain a main type Java Basics - Anfänger-Themen 1
J Fehlermeldung : cannot invoke char(at) int on the primitive type int --- Anfänger Java Basics - Anfänger-Themen 5
J Bug? Seltsame Fehlermeldung Java Basics - Anfänger-Themen 7
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
J while(nst == 0) gibt Fehlermeldung Java Basics - Anfänger-Themen 4
L Fehlermeldung Java Basics - Anfänger-Themen 6
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
J Launcher Fehlermeldung Java Basics - Anfänger-Themen 0
A Fehlermeldung Unklar, google hilft auch nicht weiter Java Basics - Anfänger-Themen 2
H Compiler-Fehler Fehlermeldung Kompilier Java Basics - Anfänger-Themen 4
A Fehlermeldung Unklar. Java Basics - Anfänger-Themen 1
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben