# Cannot invoke "javafx.scene.control.MenuButton.getScene()" nach konvertierung zu maven



## Der_AltMann (12. Jan 2021)

Ich habe ein "normales" Javafx Projekt zu einem maven Porjekt konvertiert, um die Vorteile der Modularisierung zu nutzen.
Nun bekomme ich einen Fehler, wenn ich die fxml Seite wechsle. 
[CODE lang="java" highlight="7"]@FXML
private AnchorPane content = new AnchorPane();
@FXML
private Menu diagramOptions;
@FXML
void openSimpleMode(ActionEvent event) throws InvalidFileFormatException, IOException {
    diagramOptions.setVisible(true);
    FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/SimpleMode.fxml"));
    Node simpleModePane = null;
    try {
        simpleModePane = loader.load();
    } catch (Exception e) {
        System.out.println("error in loading pane");
    }
    content.getChildren().clear();
    content.getChildren().add(simpleModePane);
    simplecontroller = loader.getController();
    if (simplecontroller != null) {
        simplecontroller.initData(ldfParser, methods, this);
    } else {
        System.out.println("null Pointer exception");
    }
     System.out.println("error after this");
}[/CODE]
Der Fehler kommt nicht, wenn ich die Zeile: 
	
	
	
	





```
diagramOptions.setVisible(true);
```
 weglasse.
Das komische ist, dass der Fehler erst nach der ganzen Methode kommt und alles "richtig" geladen und angezeigt wird.

der ganze Error:

```
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Cannot invoke "javafx.scene.control.MenuButton.getScene()" because the return value of "javafx.scene.control.skin.MenuButtonSkinBase.getSkinnable()" is null
    at javafx.controls/javafx.scene.control.skin.MenuButtonSkinBase.lambda$new$7(MenuButtonSkinBase.java:188)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:832)
```

als es noch kein maven Projekt war habe ich den Fehler nicht bekommen


----------



## kneitzel (12. Jan 2021)

Kannst Du ein kleines, minimales Beispiel bauen, das dieses Verhalten zeigt. Das ist so mit den wenigen Informationen nicht nachvollziehbar. Da wäre es gut, ein Beispiel mit dem Verhalten zu haben, das z.B. zeigt, wie das Menü in diagramOptions aussieht und so.

Denn es scheint ja ein Problem mit diesem Menü zu geben. Du setzt diesen auf Sichtbar. Das wirkt sich aber erst aus, wenn sozusagen das paint event abgearbeitet wird. Und dann hat der Button keine zugeordnete Scene oder so.

Ansonsten etwas Ratespass:
Welche JavaFX Version nutzt du? In JavaFX 12 gibt es einen bekannten Bug: https://bugs.openjdk.java.net/browse/JDK-8179097
Mit Version 14 wäre dies behoben.... (Also Entweder LTS Version 11 oder aktuelle Version 15 nutzen!)

Evtl. mögliche Workaround: Statt menü sichtbar/unsichtbar zu machen: Deaktivieren / aktivieren ...


----------



## Der_AltMann (12. Jan 2021)

kneitzel hat gesagt.:


> Kannst Du ein kleines, minimales Beispiel bauen, das dieses Verhalten zeigt. Das ist so mit den wenigen Informationen nicht nachvollziehbar. Da wäre es gut, ein Beispiel mit dem Verhalten zu haben, das z.B. zeigt, wie das Menü in diagramOptions aussieht und so.
> 
> Denn es scheint ja ein Problem mit diesem Menü zu geben. Du setzt diesen auf Sichtbar. Das wirkt sich aber erst aus, wenn sozusagen das paint event abgearbeitet wird. Und dann hat der Button keine zugeordnete Scene oder so.
> 
> ...


Vielen Dank! der Ratespass war korrekt...es lag tatsächlich an der Version


----------



## mrBrown (12. Jan 2021)

kneitzel hat gesagt.:


> Also Entweder LTS Version 11 oder aktuelle Version 15 nutzen


LTS gibts dabei nur für Geld, die neuste Version nutzen ist dabei das sinnvollste.


----------

