Erro ao abrir nova Scene no JavaFx

Bom dia, estou com um problema estranho, tenho uma scene principal com um button e ao clicar irá abrir uma nova scene, porém ao faze-lo tenho retorno de null pointer, já quebrei a cabeça e não consegui resolver…

erro:

java.lang.NullPointerException
    at br.ind.risc.view.TabelaViewHora.initRootLayout(TabelaViewHora.java:51)
    at br.ind.risc.controller.MainController.onConfirmB4(MainController.java:408)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Node.fireEvent(Node.java:8411)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)

Button:

@FXML
public void onConfirmB4(){



    try {

        if(graficos.isSelected()){
            hora = new TabelaViewHora();
            hora.initRootLayout();

        }
    }

    catch (Exception e) {
        alert = new Alert(AlertType.ERROR);
        alert.setTitle("teste");
        alert.setHeaderText("Erro");
        alert.setContentText(e.toString());
        alert.showAndWait();
        e.printStackTrace();
    }
}

Classe com layout

public class TabelaViewHora extends Application{
    private Stage primaryStage;
    private AnchorPane rootLayout;
    private FXMLLoader load;
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle("Graphical Report");

        //this.primaryStage.initStyle(StageStyle.DECORATED);
        this.primaryStage.resizableProperty().setValue(Boolean.FALSE);
        this.primaryStage.getIcons().add(new Image("/br/ind/risc/image/rel1.png"));
        //Image icon = new Image(getClass().getResourceAsStream("rel1.png"));
        //this.primaryStage.getIcons().add(icon);

        //this.primaryStage.setOnCloseRequest(e -> Platform.exit());

        
    }
    /**
     * inicializa o layout
     */
    public void initRootLayout() {
        try {
            load = new FXMLLoader();
            
            load.setLocation(ReportMain.class.getResource("/br/ind/risc/view/RootLayout.fxml"));
            
            rootLayout = (AnchorPane) load.load();

            Scene scene = new Scene(rootLayout);        
            
            
            primaryStage.setScene(scene);

            primaryStage.centerOnScreen();
            
            primaryStage.show();
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    }

}

não são as chaves do try-catch que estão erradas?

Filipe, obrigado pela resposta, acredito que não seja isso pois eu simplesmente copiei e colei da chamada do main que está funcionando, a única diferença que que nesta classe não tenho o método main.

Ele gera null pointer nesta linha primaryStage.setScene(scene);

Debugando, percebi uma coisa, ao fazer a chamada da classe
TabelaViewHora onde estão o novo stage, o mesmo não entra no método
start e isso que está causando o null pointer. Agora só não sei o motivo
de não entrar.

Amigo, já passei por isso, são vários detalhes para resolver

Acho que o problema possa estar aqui :

load.setLocation(ReportMain.class.getResource("/br/ind/risc/view/RootLayout.fxml"));

Caso você não seja esse o problema você pode mandar o e-mail com o seu projeto para fazer uma analise.

eduardo.maranata10@gmail.com

Abraço

1 curtida