Methoden Über Reflections eine Methode mit aufrufen

lam_tr

Top Contributor
Hallo zusammen,

wie kann ich die untere Methode invoken, wenn ich eine abgeleitete Event Klasse (JavaFX) übergeben möchte (e.g. ActionEvent, MouseEvent, etc.)
die Get und Invoke Methode erfordert den richtigen Typ, Basis Klasse ist an der Stelle nicht zulässig.

Ich bekommen sonst diese Exception:
java.lang.NoSuchMethodException: javafx.scene.control.Button.setOnAction(javafx.event.Event)

Code:
    private void invokeMethod(String name, Event event) {
        Method initializeMethod;
        try {
            initializeMethod = controller.getMethod(name,Event.class);
            initializeMethod.invoke(controllerInstance, event);
        } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }

Viele Grüße
lam

P.S. Ich denke ich benötige sowas als Parameter oder Class<? extends Event>.
 
Kannst Du uns denn noch die übrigen Details nennen? Was sind controller und controllerInstance? Im Augenblick verstehe ich auch noch nicht so 100%, was Du da genau machen willst, so dass Du Reflection brauchst. Evtl. kannst Du das ja auch noch einmal im Detail beschreiben.
 
Kannst Du uns denn noch die übrigen Details nennen? Was sind controller und controllerInstance? Im Augenblick verstehe ich auch noch nicht so 100%, was Du da genau machen willst, so dass Du Reflection brauchst. Evtl. kannst Du das ja auch noch einmal im Detail beschreiben.
Hallo Kneitzel,

ich versuche den FXMLLoader nachzuimplementieren, in dem ich ein Renderer für mein JavaFX "Xml" erstelle.

an dieser Stelle wird der Controller und Controller Instance intialisiert

Code:
    @Override
    public Node caseEmfModel(EmfModel object) {
        if (object.getController()!=null) {
            try {
                controller = Class.forName(object.getController());
                controllerInstance = controller.newInstance();
                Method initializeMethod = controller.getMethod("initialize");
                initializeMethod.invoke(controllerInstance,null);
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) {
                e.printStackTrace();
            }
        }
        return doSwitch(object.getRoot());
    }

Schlussendlich wird die controller class in der XML Datei definiert.

Und beim laden der XML werden die Steuerelement aufgebaut.

Der Grund warum ich es mache ist, Tom Schindl hat in seinem Post geschrieben das der FXMLLoader sehr langsam ist, weil er sehr viel Reflections benutzt Link.

Ich will in mein Renderer weniger Reflections benutzen und auf Basis der XML später auch noch die Möglichkeit geben, die zur XML gehörige JavaFX Klasse generieren.
 

Zurück
Oben