Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException)

_user_q

Aktives Mitglied
Moin,

erst mal die MainView mit dem MainController:

MainController.java:
Java:
// @FXML?
private OptionsController optionsController;

public AnchorPane mainAnchorPane;
public AnchorPane otherAnchorPane;

public TextField textFieldXY;
// something ...

MainView.fxml:
Java:
<AnchorPane fx:id="mainAnchorPane" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="com.github.xy.Controller.MainController">

    <children>
        <fx:include fx:id="otherAnchorPane" source="OtherView.fxml"/>
    </children>
</AnchorPane>

Und die zweite View mit dem zweiten Controller:
OtherController.java:
Java:
// @FXML?
private MainController mainController;

public Button testButton;
public TextField textFieldXYZ;

// Folgende Methode wird durch das Klicken auf testButton aufgerufen:
public void startProcess(ActionEvent e){
    new AndereMethode(mainController, this);
}

OtherView.fxml:
Java:
<AnchorPane xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.github.xy.Controller.OtherController">
    <Button fx:id="testButton" onAction="#startProcess" text="Start">
    </Button>
</AnchorPane>

AndereMethode.java:
Java:
public class AndereMethode {

    public AndereMethode(MainController mainController, OtherController otherController){
    mainController.textFieldXY.setText("Hi");
    otherController.textFieldXYZ.setText("Hallo");
    // something ...
  }
}

Der NullPointerException-Wurf führt mich zur Zeile
Java:
new AndereMethode(mainController, this);

Wenn ich OptionsController optionsController; im MainController deklarieren möchte, gibt mir das auch einen NullPointerException.

Ich möchte mal eure Lösungsansätze durchlesen, da dies jetzt der dritte Tag ist, wo ich eine Lösung finden muss. Ich möchte halt einfach nur die View/den Controller splitten, damit mehr Ordnung herrscht. Ich habe bereits fast 70 Methoden im MainController. Das ist echt unübersichtlich ...

Danke!
 
Y

yfons123

Gast
eig machst du das im mvvm über einen viewbinder also eine zwischen stelle und nicht getrennte controller

du kannst die fxml unter sich auch aufteilen dh du kannst sie inkludieren wie bei html seiten

zu deinem problem
// @FXML?
private MainController mainController;
das funktioniert nicht da dein Controller zu diesem zeitpunkt nicht sichtbar ist für den anderen da dieser per reflection erzeugt wird und du die referenz nicht holst
Java:
  FXMLLoader loader = new FXMLLoader(getClass().getResource("/main.fxml"));

  Parent root = loader.load();
    // dein Main Controller
  Main erster = loader.getController<Main>();

   
  FXMLLoader loader = new FXMLLoader(getClass().getResource("/Zwei.fxml"));

  Parent root = loader.load();

  Zwei zweiter = loader.getController<Zwei>();

    erster.GibZweiten(zweiter);
so ungefähr wäre ein richtiger ansatz wenn sich die untereinander kennen sollten, warum eine view 70 eventhandler braucht ist mir ein rätsel und sehr zweifelhaft
EDIT
ein beispiel für viewbinder wäre das
Code:
public class ViewBinder{
    Main erster = new Main();
    Zweiter zweiter = new Zweiter();
    
    @FXML
    public void Do (){ erster.Do(); }
    @FXML
    public void DoOther() { zweiter.Do(); }

}
das wäre der normale ansatz das wichtige ist dass du nicht rekursiv bei controller wirst
 
Zuletzt bearbeitet von einem Moderator:

_user_q

Aktives Mitglied
eig machst du das im mvvm über einen viewbinder also eine zwischen stelle und nicht getrennte controller

du kannst die fxml unter sich auch aufteilen dh du kannst sie inkludieren wie bei html seiten

zu deinem problem

das funktioniert nicht da dein Controller zu diesem zeitpunkt nicht sichtbar ist für den anderen da dieser per reflection erzeugt wird und du die referenz nicht holst
Java:
  FXMLLoader loader = new FXMLLoader(getClass().getResource("/main.fxml"));

  Parent root = loader.load();
    // dein Main Controller
  Main erster = loader.getController<Main>();

   
  FXMLLoader loader = new FXMLLoader(getClass().getResource("/Zwei.fxml"));

  Parent root = loader.load();

  Zwei zweiter = loader.getController<Zwei>();

    erster.GibZweiten(zweiter);
so ungefähr wäre ein richtiger ansatz wenn sich die untereinander kennen sollten, warum eine view 70 eventhandler braucht ist mir ein rätsel und sehr zweifelhaft
Die ca. 70 EventHander kommen deshalb zustande, da jedes Objekt andere Funktionen hat. :D
 

_user_q

Aktives Mitglied
aber nicht jede funktionalität muss von der anderen wissen i guess? ab dann kannst du deine fxml aufteilen bzw viewbinder benutzen

eig machst du das im mvvm über einen viewbinder also eine zwischen stelle und nicht getrennte controller

du kannst die fxml unter sich auch aufteilen dh du kannst sie inkludieren wie bei html seiten

zu deinem problem

das funktioniert nicht da dein Controller zu diesem zeitpunkt nicht sichtbar ist für den anderen da dieser per reflection erzeugt wird und du die referenz nicht holst
Java:
  FXMLLoader loader = new FXMLLoader(getClass().getResource("/main.fxml"));

  Parent root = loader.load();
    // dein Main Controller
  Main erster = loader.getController<Main>();

 
  FXMLLoader loader = new FXMLLoader(getClass().getResource("/Zwei.fxml"));

  Parent root = loader.load();

  Zwei zweiter = loader.getController<Zwei>();

    erster.GibZweiten(zweiter);
so ungefähr wäre ein richtiger ansatz wenn sich die untereinander kennen sollten, warum eine view 70 eventhandler braucht ist mir ein rätsel und sehr zweifelhaft
EDIT
ein beispiel für viewbinder wäre das
Code:
public class ViewBinder{
    Main erster = new Main();
    Zweiter zweiter = new Zweiter();
  
    @FXML
    public void Do (){ erster.Do(); }
    @FXML
    public void DoOther() { zweiter.Do(); }

}
das wäre der normale ansatz das wichtige ist dass du nicht rekursiv bei controller wirst
Parent root = loader.load(); wird in deinem Beispiel 2-mal aufgerufen, das würde nicht gehen. Deswegen habe ich die Variable umbenannt, aber dann wird ja die zweite View geladen und die MainView sieht man nicht.

Wenn ich mir so was, so was, oder so was anschaue, dann führt mich das immer wieder dahin zurück, dass ich den OtherController anscheinend im MainController deklarieren soll und in der initialize()-Methode rufe ich dann etwas aus dem OtherController auf. Ich weiß gar nicht mehr richtig, wie ich das über Text beschreiben soll. Egal was ich mache, ich bekomme immer diese NullPointerException.

Außerdem verstehe ich diese Beispiele nicht, denn:
Wenn ich die View und den Controller aufteilen soll, damit es übersichtlicher wird, warum soll ich dann etwas in den MainController schreiben, was eigentlich den OtherController betrifft (z. B. das Aufrufen von Methoden, die im OtherController liegen)?

Laut Anleitungen soll ich einfach nur die OtherView.fxml in der Main.fxml inkludieren und dann läuft der Hase. Außerdem schreibt jeder etwas anderes.

Ich sitze zwar locker schon über 20 Stunden an diesem Problem, aber ich mache solange weiter, bis ich es hinbekomme.

Wie ich das jetzt verstanden habe, müssen die Controller sich untereinander kennen. Ich brauche am besten eine Anleitung von 0-100.
 
Y

yfons123

Gast
Parent root = loader.load(); wird in deinem Beispiel 2-mal aufgerufen
mnja der loader hätte umbenannt werden müssen...


da fxml für das mvvm pattern gemacht wurde musst du dich auch halbwegs dran halten

wenn du mehrere controller hast dann sollte man einen viewbinder machen der alle controller kennt und die bindings zur view regelt


Java:
public class ViewBinder{
    Main erster = new Main();
    Zweiter zweiter = new Zweiter();
    
    @FXML
    public void Do (){ erster.Do(); }
    @FXML
    public void DoOther() { zweiter.Do(); }

}
was dem entsprechen würde, dieser wird dann in der fxml erzeugt und im konstruktor oder sonst wo werden die "verbindungen der controller" miteinander geteilt...

das wäre der "richtige" ansatz
 

_user_q

Aktives Mitglied
mnja der loader hätte umbenannt werden müssen...


da fxml für das mvvm pattern gemacht wurde musst du dich auch halbwegs dran halten

wenn du mehrere controller hast dann sollte man einen viewbinder machen der alle controller kennt und die bindings zur view regelt


Java:
public class ViewBinder{
    Main erster = new Main();
    Zweiter zweiter = new Zweiter();
   
    @FXML
    public void Do (){ erster.Do(); }
    @FXML
    public void DoOther() { zweiter.Do(); }

}
was dem entsprechen würde, dieser wird dann in der fxml erzeugt und im konstruktor oder sonst wo werden die "verbindungen der controller" miteinander geteilt...

das wäre der "richtige" ansatz
Okay, also wenn ich Objekte aus dem z. B. MainController in anderen Controllern und andersherum ansprechen möchte, brauche ich erst mal eine ViewBinder-Klasse, damit die Controller sich gegenseitig kennen. Ich frage mich halt nur, weshalb

Java:
MainController mainController = Main.getInstance().getMainController();
funktioniert und der MainController im ganzen Projekt verwendet werden kann, nur halt nicht in anderen Controllern.
Ich habe ja in der Main.java-Klasse die Methode
Java:
private MainController mainController;
public MainController getMainController() {
    return mainController;
}
um die public Objekte, die im MainController liegen, überall anzusprechen. Sobald ich aber den ControllerA in ControllerB oder andersherum deklarieren möchte und die dazugehörige Variable neheme, wirft es eine NullPointerException:
Java:
// ControllerA.java
ControllerB controllerB;

public void clickAufEinenButton(ActionEvent e){
    controllerB.eineMethode(e); // NullPointerException
}

// ControllerB.java
ControllerA controllerA;

public void clickAufEinenButton(ActionEvent e){
    controllerA.eineMethode(e); // NullPpointerException
}
Also ich habe jetzt nur meine Verwirrtheit erläutert.

Wie ich aber diese ViewBinder-Klasse anwende, weiß ich noch nicht.

Angenommen, ich habe jetzt alle Methoden in der ViewBinder-Klasse deklariert, was tun in deinem Beispiel dann diese Do-Methoden darunter? Denn ich möchte ja nicht von anderen Klassen aus die Methoden von Controllern aufrufen, dann kann ich mir die Arbeit ja sparen, weil die Methoden in den Controller-Klassen andere Klassen ansprechen - wo der Code lesbarer eingeteilt ist -, sobald diese Methoden durch Events aufgerufen werden.

Dann noch:
eig machst du das im mvvm über einen viewbinder also eine zwischen stelle und nicht getrennte controller
Ich verstehe das so, dass ich mehrere View.fxml-Klassen habe, die auf eine Controller-Klasse zurückgreifen. Aber ich habe ja fast 70 Methoden in der MainController-Klasse ... das sorgt für Unordnung.

Ich mag mich vielleicht doof anstellen, aber ich bestehe darauf, das irgendwann zu verstehen. :) Auf jeden Fall erst mal danke!
 

_user_q

Aktives Mitglied
mnja der loader hätte umbenannt werden müssen...


da fxml für das mvvm pattern gemacht wurde musst du dich auch halbwegs dran halten

wenn du mehrere controller hast dann sollte man einen viewbinder machen der alle controller kennt und die bindings zur view regelt


Java:
public class ViewBinder{
    Main erster = new Main();
    Zweiter zweiter = new Zweiter();
 
    @FXML
    public void Do (){ erster.Do(); }
    @FXML
    public void DoOther() { zweiter.Do(); }

}
was dem entsprechen würde, dieser wird dann in der fxml erzeugt und im konstruktor oder sonst wo werden die "verbindungen der controller" miteinander geteilt...

das wäre der "richtige" ansatz
Ich möchte dir kurz diese Frage in einem anderen Forum zeigen, damit du schon mal siehst, was mir vorgeschlagen wurde. Vielleicht kannst du darauf zurückkommen, wenn dies wichtig ist. Falls die Fragen unterschiedlich zu verstehen sind, ich meine dasselbe Problem.
 
Y

yfons123

Gast
ok also kurzes overview was passiert und warum dein ding so nicht geht

Java:
<fxmlblabla controller="main.controller"/>
das ist deine erste fxml datei

und deine zweite
Java:
<fxmlblabla controller="main.kartoffel"/>

die klassen sind so aufgebaut
Code:
public class Controller{
    public Kartoffel kartoffel;
}
und in kartoffel genau andersherum

so was passiert jetzt eig mit dem fxmlloader zeug
java nimmt den code der in den fxmls steht und wandelt ihn um in objekte

zb wenn du einen controller deklarierst macht javafx fxmlloader das
Java:
Controller contr = getClass("main.Controller").newInstance();
ungefähr sowas dh das instanziiert per pfad den du in der fxml angegeben hast einen neuen controller

und tada schon siehst du warum es nicht "den anderen" kennt.. es ist ein neues objekt und du hast die kartoffel nicht zugewiesen dh es ist null

es ist ein komplett neues objekt .. neue instanz ..die kennt die kartoffel nicht


so jetzt view binder
du kannst es machen mit dem nested zeug ... das ist ansich das mit dem fxmls schachteln.. das kannst du tun bei UI elemente die sich wieder holen du hast zb 10 mal ne borderpane mit irgendwelche buttons und die wiederholen sich , damit kannst du das "nesting" machen also fxmls verschachteln ... du kannst den "unter fxml" auch controller zuweisen, das macht aber nur sinn bei wiederholungen

du hast denke ich mal wenig wiederholungen weil du sonst einfach nicht 70 methoden hättest die unterschiedlich sind
da geht man den ansatz des view binders dh

du möchtest eig 10 controller zb haben... aber deine fxml verträgt ja nur 1en .. sooo der trick ist jetzt du schiebst einen view binder dazwischen
der kennt die 10 controller und wird in der fxml angegeben
dh du hast zb diese fxml
Code:
<fxmlblabla controller="main.ViewBinder"/>
<VBox>
<Button methode="fancy">Fancy</Button>
<Button methode="other">Other</Button>
<Button methode="nop">Nop</Button>
</VBox>
und die buttons gehören zwar in die selbe view aber du willst daraus 3 controller machen.. das geht so net...deswegen ja der viewbinder
der zb so aussieht
Code:
public class ViewBinder{
    private FancyController fancy = new FancyController();
    private OtherController other = new OtherController();
    private NopController nope = new NopController();
  
    @FXML
    public void fancy(){
        fancy.DoFancyStuff();
    }
    @FXML
    public void other(){
        other.DoOtherStuff();
    }
    @FXML
    public void nop(){
        nop.justNope();
    }
}
so wenn du das jetzt mal umsetzen würdest hast du 1en viewbinder in der fxml und wenn der mit dem getclass erzeugt wird erzeugt der sich gleich controller mit und der kennt alle controller
der viewbinder ist nur dafür da
1. dass sich die controller untereinander kennen falls nötig
2. weiterleiten von den @FXML annotationen.. das ist nur ein "dazwischen schieben"

und das wäre der grobe ansatz wie es von MVVM ( das design das mit fxml umgesetzt wurde ) gedacht gewesen wäre wie man mit deinem problem umgeht

das nesting ist bei unterschiede blöd...nesting ist sozusagen wenn du dir eine eigene konstellation aus nodes baust und die sich wiederholen

ANMERKUNGEN: ich habe noch nie eine fxml geschrieben oder editiert.. ich benutze nur GLUONS scene builder der die fxmls generiert also keine ahnung der syntax.. der scene builder funktioniert aber super muss ich schon sagen, gluon scheint javafx sehr zu mögen



ANMERKUNG 2:
du solltest deine FXML nicht rekursiv aufbauen dh eine extreme verschachtelung und auch deine controller sollten keine rekursive abhängigkeit haben... da veränderungen im nachhinein für die tonne sind... das ziel ist immmer
du kannst eine fxml weg schmeißen und eine neue rein machen.. und es funktioniert immer noch ( deswegen werden dir keine errors geworfen wenn eine @FXML annotation fehlt weil ees möglich sein muss dass du die FXML mal nur mit einer funktionalität ausprobieren kannst ) das funktioniert aber nicht bei rekursiven abhängigkeiten
 
Zuletzt bearbeitet von einem Moderator:

KonradN

Super-Moderator
Mitarbeiter
Also ich habe mir hier jetzt nicht die ganzen Vorschläge im Detail angesehen. Was mich erst einmal etwas verwirrt ist folgendes:

<fx:include fx:id="otherAnchorPane" source="OtherView.fxml"/>
Hier lädst Du ein anderes FXML, welches auch einen Controller hat.

public AnchorPane otherAnchorPane;
Hier erwartest Du eine AnchorPane. Das ist zumindest erst einmal seltsam, denn Du hast da ja erst einmal in diesem FXML keine AnchorPane!

Da wäre also tatsächlich eher folgendes sinnvoll (was Dir im anderen Thread ja geraten wurde):
Java:
@FXML?
private OptionsController otherAnchorPaneController;

Wobei in OtherView.fxml dann OptionsController als Controller eingetragen werden sollte und diese fx:id otherAnchorPane sollte man umbenennen in meinen Augen.

Damit solltest Du den OptionsController in deinem Controller haben.

Wenn Du nun im OptionsController auch den MainController (oder wie dieser auch immer heissen mag) brauchst, dann kannst Du das bei der Initialisierung mit angeben. Also in der MainController Initialisierung rufst Du im OptionsController einen Setter für den MainController auf ... also sowas wie otherAnchrorPaneController.setMainController(this);

Damit hast Du dann durchaus Zugriff auf die Views und kannst da auch untereinander Dinge aufrufen.

Ich würde Dir aber empfehlen, dies deutlich besser zu strukturieren. Alleine schon, dass eben die Abhängigkeiten gering gehalten werden. Und das kann man meist über die Model Klassen lösen. Mein Ansatz ist also der, dass ich immer erst das Model erstelle und dort die Beziehungen zueinander habe. Bei der Oberfläche kommen dann "nur" noch View und ViewModel dazu und das war es dann schon fast. Die Fenster oder Teile haben dann erst einmal keine Verbindung zueinander.

Ich skizziere einfach einmal wie sowas aussehen könnte: Minimales Beispiel: Das Hauptfenster nimmt zwei Orte und zeigt den Abstand an. Es gibt aber nun eine Option: Man kann einstellen, in welcher Einheit das dargestellt werden kann.

Dann interessiert das Hauptfenster sich nicht für ein Optionsfenster. Es ist vollkommen egal, woher die Änderung kommt. Das kann ein Optionsfenster sein. Das kann aber sein, dass die Konfigurationsdatei angepasst wurde und die Applikation da halt schaut, ob die Datei verändert wurde. Also egal, woher es kommt. Die Einheit wird geändert. Das ist in der Applikation als Feature hinterlegt worden - die Einheit kann sich ändern. Daher gibt es z.B. ein Observer Pattern und das interne Model für die Option kann signalisieren: Konfiguration wurde geändert.
Da das Hauptfenster sich für dies interessiert, trägt sich das Hauptfenster da ein. Und schon bekommt das Hauptfenster mit: Optionen haben sich geändert. Daher kann es darauf reagieren und die Strecke neu berechnen und mit neuer Einheit anzeigen.

Sowas kann man immer weiter treiben bis hin zu einem EventBus.

Der generelle Tipp ist aber, dass man hier Dinge möglichst separat hält und Abhängigkeiten gering hält.
 

_user_q

Aktives Mitglied
Also ich habe mir hier jetzt nicht die ganzen Vorschläge im Detail angesehen. Was mich erst einmal etwas verwirrt ist folgendes:

<fx:include fx:id="otherAnchorPane" source="OtherView.fxml"/>
Hier lädst Du ein anderes FXML, welches auch einen Controller hat.

public AnchorPane otherAnchorPane;
Hier erwartest Du eine AnchorPane. Das ist zumindest erst einmal seltsam, denn Du hast da ja erst einmal in diesem FXML keine AnchorPane!

Da wäre also tatsächlich eher folgendes sinnvoll (was Dir im anderen Thread ja geraten wurde):
Java:
@FXML?
private OptionsController otherAnchorPaneController;

Wobei in OtherView.fxml dann OptionsController als Controller eingetragen werden sollte und diese fx:id otherAnchorPane sollte man umbenennen in meinen Augen.

Damit solltest Du den OptionsController in deinem Controller haben.

Wenn Du nun im OptionsController auch den MainController (oder wie dieser auch immer heissen mag) brauchst, dann kannst Du das bei der Initialisierung mit angeben. Also in der MainController Initialisierung rufst Du im OptionsController einen Setter für den MainController auf ... also sowas wie otherAnchrorPaneController.setMainController(this);

Damit hast Du dann durchaus Zugriff auf die Views und kannst da auch untereinander Dinge aufrufen.

Ich würde Dir aber empfehlen, dies deutlich besser zu strukturieren. Alleine schon, dass eben die Abhängigkeiten gering gehalten werden. Und das kann man meist über die Model Klassen lösen. Mein Ansatz ist also der, dass ich immer erst das Model erstelle und dort die Beziehungen zueinander habe. Bei der Oberfläche kommen dann "nur" noch View und ViewModel dazu und das war es dann schon fast. Die Fenster oder Teile haben dann erst einmal keine Verbindung zueinander.

Ich skizziere einfach einmal wie sowas aussehen könnte: Minimales Beispiel: Das Hauptfenster nimmt zwei Orte und zeigt den Abstand an. Es gibt aber nun eine Option: Man kann einstellen, in welcher Einheit das dargestellt werden kann.

Dann interessiert das Hauptfenster sich nicht für ein Optionsfenster. Es ist vollkommen egal, woher die Änderung kommt. Das kann ein Optionsfenster sein. Das kann aber sein, dass die Konfigurationsdatei angepasst wurde und die Applikation da halt schaut, ob die Datei verändert wurde. Also egal, woher es kommt. Die Einheit wird geändert. Das ist in der Applikation als Feature hinterlegt worden - die Einheit kann sich ändern. Daher gibt es z.B. ein Observer Pattern und das interne Model für die Option kann signalisieren: Konfiguration wurde geändert.
Da das Hauptfenster sich für dies interessiert, trägt sich das Hauptfenster da ein. Und schon bekommt das Hauptfenster mit: Optionen haben sich geändert. Daher kann es darauf reagieren und die Strecke neu berechnen und mit neuer Einheit anzeigen.

Sowas kann man immer weiter treiben bis hin zu einem EventBus.

Der generelle Tipp ist aber, dass man hier Dinge möglichst separat hält und Abhängigkeiten gering hält.
Das mit
Java:
@FXML
private OptionsController optionsController;
in der MainController-Klasse habe ich schon oft genug versucht. Denn wenn ich jetzt in der initialize-Methode Folgendes mache
Java:
// Im MainController.java:
public void initialize(URL url, ResourceBundle rb) {
optionsController.setMainController(this);
// ...
}

// Im OptionsController.java:
Controller mainController;
public void setMainController(Controller mainController) {
   this.mainController = mainController;
}
kriege ich bei optionsController.setMainController(this); eine NullPointerException.
Main.fxml:
XML:
<AnchorPane fx:id="mainAnchorPane" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="com.github.xy.Controller.Controller">

    <children>
        <fx:include fx:id="optionsAnchorPane" source="OptionsItems.fxml"/>
    </children>
</AnchorPane>
OptionsItems.fxml:
XML:
<AnchorPane xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.github.xy.Controller.OptionsController">
    <Button fx:id="btn_Start" onAction="#startAutoProcess" text="Start">
        <cursor>
            <Cursor fx:constant="HAND" />
        </cursor>
    </Button>
</AnchorPane>
Das war auch so der erste Ansatz, mit dem ich versucht habe, den Controller, der nun zu groß wurde, aufzuteilen - indem ich mehrere Views in der MainView inkludiere und jeder inkludierten View einen eigenen Controller zuweise. Irgendwas ist aber bei mir falsch. Entweder muss ich wirklich eine ViewBinder-Klasse nutzen oder ich habe einen winzigen Logikfehler drin. Denn du bist der 100., der mir diesen Ansatz vorschlägt, aber er funktioniert irgendwie nicht.
 

KonradN

Super-Moderator
Mitarbeiter
Aus dem von dir verlinkten anderen Forums-Thread:
Der Name für das Feld setzt sich aus dem Namen der ID und dem Wort Controller zusammen.
Wenn also in der fxml fx:id="optionsAnchorPane" steht, dann muss die Variable im Controller optionsAnchorPaneController heißen!

Also entweder die Variable umändern zu:
Java:
@FXML
OptionsController optionsAnchorPaneController;

oder in der fxml die id anpassen zu fx:id="options"`

Der FXMLLoader lädt ja die FXML Datei, erzeugt den Controller und geht dann den Controller per Reflection durch um zu schauen, ob da noch etwas initialisiert werden muss. Und bei optionsController findet sich halt keine Element mit passender id.
 

_user_q

Aktives Mitglied
Aus dem von dir verlinkten anderen Forums-Thread:

Wenn also in der fxml fx:id="optionsAnchorPane" steht, dann muss die Variable im Controller optionsAnchorPaneController heißen!

Also entweder die Variable umändern zu:
Java:
@FXML
OptionsController optionsAnchorPaneController;

oder in der fxml die id anpassen zu fx:id="options"`

Der FXMLLoader lädt ja die FXML Datei, erzeugt den Controller und geht dann den Controller per Reflection durch um zu schauen, ob da noch etwas initialisiert werden muss. Und bei optionsController findet sich halt keine Element mit passender id.
Der Name für das Feld setzt sich aus dem Namen der ID und dem Wort Controller zusammen.
Und es stand schon in der ersten Antwort, die ich überhaupt bekommen habe ... 3 Tage ... und es lag einfach nur da dran. Oh man. Typisch Programmieren. xD -.-
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Objekte refresh AWT, Swing, JavaFX & SWT 3
N Graphics Objekte scalen mit Veränderung des Bildschirms AWT, Swing, JavaFX & SWT 19
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
Redeason Objekte in meiner GUI verschieben AWT, Swing, JavaFX & SWT 1
_user_q JavaFX Wie kann ich alle Objekte außer eins deaktivieren (das Gleiche mit BoxBlur)? AWT, Swing, JavaFX & SWT 11
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
J Objekte von 2 GUIs zusammenfassen AWT, Swing, JavaFX & SWT 2
T Swing Objekte in Liste AWT, Swing, JavaFX & SWT 2
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
T Rectangle Transparent und darunter liegende Objekte Bedienbar AWT, Swing, JavaFX & SWT 0
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
Z Möglichkeit mit Listerners die Farbe meiner Objekte zu ändern AWT, Swing, JavaFX & SWT 15
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
I Objekte aus contentPane löschen funktioniert nicht AWT, Swing, JavaFX & SWT 3
C Swing Java Objekte AWT, Swing, JavaFX & SWT 4
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
M SWT Durchlagen der SWT Objekte mit Tabulator AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
D Swing Objekte bewegen mit MouseMotionListener AWT, Swing, JavaFX & SWT 4
P Objekte anzeigen und verschieben - wie? AWT, Swing, JavaFX & SWT 6
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
G Objekte in und aus einer JTable laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
propra Objekte auf Zeichenfläche verschieben AWT, Swing, JavaFX & SWT 2
propra 2D-Grafik Beliebig viele Objekte auf einer Zeichenfläche zeichnen AWT, Swing, JavaFX & SWT 15
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Objekte in JPanel bewegen AWT, Swing, JavaFX & SWT 4
E Objekte zu Path2D zusammensetzen AWT, Swing, JavaFX & SWT 2
M verschieben der Objekte in JPanel nur stückchenweise möglich AWT, Swing, JavaFX & SWT 14
4 AWT bestimmte Objekte zeichnen und löschen AWT, Swing, JavaFX & SWT 8
R komplette Objekte in JTable einfügen AWT, Swing, JavaFX & SWT 18
C File-Objekte an JList übergeben und abrufen AWT, Swing, JavaFX & SWT 6
J Objekte aus Defaulttablemodel AWT, Swing, JavaFX & SWT 5
K MouseListener für Objekte auf einem Frame AWT, Swing, JavaFX & SWT 4
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
M JGraph Kante ohne Objekte AWT, Swing, JavaFX & SWT 2
P Von einem Panel auf die Objekte des anderen Panels zugreifen AWT, Swing, JavaFX & SWT 3
F Swing Objekte mit Maus verschieben AWT, Swing, JavaFX & SWT 8
T Mehrere sich bewegende Objekte in einem Frame AWT, Swing, JavaFX & SWT 14
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
J SWT 4 Objekte auf einem Composite anordnen AWT, Swing, JavaFX & SWT 5
L SWT Objekte in GC? AWT, Swing, JavaFX & SWT 8
M grafische objekte erstellen und bewegen AWT, Swing, JavaFX & SWT 4
E Swing Objekte werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
J Ansprechen untergeordneter Objekte AWT, Swing, JavaFX & SWT 6
C JTree Einzelne Objekte färben AWT, Swing, JavaFX & SWT 4
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
S Java3D: Alle Objekte in BranchGroup löschen während Laufzeit AWT, Swing, JavaFX & SWT 3
M Objekte weitergeben AWT, Swing, JavaFX & SWT 3
1 Bubble Breaker - Objekte fallen nicht runter AWT, Swing, JavaFX & SWT 3
W Objekte auf JPanel bewegen??? AWT, Swing, JavaFX & SWT 2
F "Objekte" mit "Verbindungen" grafisch darstellen AWT, Swing, JavaFX & SWT 4
G Objekte in JComboBox? AWT, Swing, JavaFX & SWT 7
P Speichern und Auswahl gezeichneter Objekte AWT, Swing, JavaFX & SWT 7
G Graphics Objekte in AWT Container einfügen AWT, Swing, JavaFX & SWT 2
D DnD ganzer Objekte(Objekt erstellen) AWT, Swing, JavaFX & SWT 2
W 2 Objekte in eine Tabellenzelle? AWT, Swing, JavaFX & SWT 3
L Objekte in Liste oder ähnliches anzeigen AWT, Swing, JavaFX & SWT 3
S JFrame-Klasse soll ein/mehrere Objekte einer JPanel-Klasse-& AWT, Swing, JavaFX & SWT 3
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
O Eigenschaften größerer GUI-Objekte verwalten AWT, Swing, JavaFX & SWT 3
A JTable, eigenes TableModel und dessen Objekte AWT, Swing, JavaFX & SWT 4
G Canvas + Swing-Objekte AWT, Swing, JavaFX & SWT 5
G Objekte in SWT List AWT, Swing, JavaFX & SWT 3
D Schriftgrößen aller Objekte ändern AWT, Swing, JavaFX & SWT 19
X Durch DrawLine verschwindet das Fenster und die Objekte AWT, Swing, JavaFX & SWT 13
N [und täglich grüsst das.] Zeichnen -> Objekte verschwinde AWT, Swing, JavaFX & SWT 2
S JList mit DefaultListModel befüllt, wie Objekte selektieren? AWT, Swing, JavaFX & SWT 3
M grafische Objekte mit Listener versehen AWT, Swing, JavaFX & SWT 3
G JTextArea Objekte in einem Array speichern? AWT, Swing, JavaFX & SWT 3
G Aus Arraylist bestimmte Objekte wiedergegeben bekommen? AWT, Swing, JavaFX & SWT 7
M Keine Buttons oder sonstige Objekte in JFrame unter Linux AWT, Swing, JavaFX & SWT 4
L Mehrere Scrollbar objekte miteinander verbinden AWT, Swing, JavaFX & SWT 3
E Swing-Fenster als Objekte im Sinne des OO-Prgrammparadigmas AWT, Swing, JavaFX & SWT 2
B Objekte auf Fenster verschieben. Bewegliche jPanels. AWT, Swing, JavaFX & SWT 5
T Frage zu JTree: Leaf Objekte vergleichen AWT, Swing, JavaFX & SWT 3
G Einzelne Objekte neu zeichnen AWT, Swing, JavaFX & SWT 8
T Objekte in JList AWT, Swing, JavaFX & SWT 4
H JApplet fehler objekte unsichtbar. AWT, Swing, JavaFX & SWT 2
M Image-Objekte in JEditorPane anzeigen? AWT, Swing, JavaFX & SWT 3
F bewegte objekte mit awt AWT, Swing, JavaFX & SWT 2
B Zwei "gleiche" Objekte auf einem Frame platzieren AWT, Swing, JavaFX & SWT 2
F Objekte beliebigen Typs zu JComboBox hinzufügen AWT, Swing, JavaFX & SWT 7
J Anordung der Objekte in der Oberfläche? AWT, Swing, JavaFX & SWT 3
V Objekte "durch" ActionListener zeichnen AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben