0

ich mit JavaFX arbeiten und Dateien und zugehörige Controller-Klassen verwenden .fxml, von Szene zu Szene zu bewegen und Funktionalitäten für die Tasten usw.InvocationTargetException während Szenen mit JavaFX Schalt

Meine MainMenuController mit den Menüs der betroffenen ein Spiel, das ich entwickle. Der MainController beschäftigt sich mit dem Spielbrett, das ich zu laden versuche. Aber immer, wenn ich die „Launch Game“ Taste drücken, erhalte ich diese Fehler:

javafx.fxml.LoadException: 
/C:/.../bin/client/ui/Main.fxml 

cause: java.lang.NullPointerException 
where: 
/C:/.../bin/client/ui/Main.fxml 

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
at javafx.event.Event.fireEvent(Unknown Source) 
at javafx.scene.Node.fireEvent(Unknown Source) 
at javafx.scene.control.Button.fire(Unknown Source) 
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown Source) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
at javafx.event.Event.fireEvent(Unknown Source) 
at javafx.scene.Scene$MouseHandler.process(Unknown Source) 
at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source) 
at javafx.scene.Scene.impl_processMouseEvent(Unknown Source) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(Unknown Source) 
at com.sun.javaenter code herefx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) 
at com.sun.glass.ui.View.handleMouseEvent(Unknown Source) 
at com.sun.glass.ui.View.notifyMouse(Unknown Source) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.reflect.misc.Trampoline.invoke(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.reflect.misc.MethodUtil.invoke(Unknown Source) 
... 49 more 

Caused by: java.lang.NullPointerException: Root cannot be null 
at javafx.scene.Scene.<init>(Unknown Source) 
at javafx.scene.Scene.<init>(Unknown Source) 
at client.ui.MainMenuController.handleButtonAction(MainMenuController.java:251) 
... 58 more 

Mir scheint es so das MainController das Problem verursacht und deshalb verhindert Main.fxml zu laden. Hier

ist die Methode der MainMenuController wo "launchGame" auf eine neue Szene mit Main.fxml als root (letzte} else if (...) {Anweisung) wechseln sollte:

@FXML 
private void handleButtonAction(ActionEvent e) { 
Stage stage = null; 
Parent root = null; 
try { 

    if (e.getSource() == leaveBrowserButton) { 
    stage = (Stage) leaveBrowserButton.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("PlayGameSelection.fxml")); 
    } 
    if (e.getSource() == connect1Button) { 
    stage = (Stage) connect1Button.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("Lobby.fxml")); 
    StartUI.getClient().connect(0); 
    } 
    if (e.getSource() == connect2Button) { 
    StartUI.getClient().connect(1); 
    } 
    if (e.getSource() == connect3Button) { 
    StartUI.getClient().connect(2); 
    } 
    if (e.getSource() == playGame) { 
    stage = (Stage) playGame.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("PlayGameSelection.fxml")); 
    } else if (e.getSource() == login) { 
    stage = (Stage) login.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("MainMenu.fxml")); 
    } else if (e.getSource() == createProfile) { 
    stage = (Stage) createProfile.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("CreateNewPlayer.fxml")); 
    } else if (e.getSource() == goToMainMenu) { 
    stage = (Stage) goToMainMenu.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("MainMenu.fxml")); 
    } else if (e.getSource() == goToCreateNewPlayer) { 
    stage = (Stage) goToCreateNewPlayer.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("CreateNewPlayer.fxml")); 
    } else if (e.getSource() == backToLogin) { 
    stage = (Stage) backToLogin.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("Login.fxml")); 
    } else if (e.getSource() == manageProfile) { 
    stage = (Stage) manageProfile.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("ManagePlayer.fxml")); 
    } else if (e.getSource() == backToGame) { 
    stage = (Stage) backToGame.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("Main.fxml")); 
    } else if (e.getSource() == backToMain || e.getSource() == goBackButton) { 
    stage = (Stage) backToMain.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("MainMenu.fxml")); 
    } else if (e.getSource() == playLocalGame) { 
    stage = (Stage) playLocalGame.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("Browser.fxml")); 
    } else if (e.getSource() == launchGame) { 
    stage = (Stage) launchGame.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("Main.fxml")); 
    StartGameMessage startGame = 
     new StartGameMessage(StartUI.getClient().getGamestate().whosTurnIsIt(), false, 0); 
    StartUI.getClient().addMessage(startGame); 
    } else { 
    stage = (Stage) playGame.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource(e.getClass().getName())); 
    } 
} catch (Exception e1) { 
    System.out.println(e1.getMessage()); 
    System.out.println(e1); 
    System.out.println("cause: " + e1.getCause()); 
    System.out.println("where: " + e1.getLocalizedMessage()); 
    System.out.println(e1.getStackTrace()); 
} 

Scene scene = new Scene(root); 
stage.setScene(scene); 
stage.show(); 
} 

I stellen Sie den Regler auf MainController in der Main.fxml Datei, damit ich es nicht sehen, ein Problem:

<AnchorPane fx:id="anchorPane" prefHeight="720.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="client.ui.MainController"> 

Und hier meine MainController:

package client.ui; 

import java.io.IOException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.ResourceBundle; 

import client.domain.DevelopmentCard; 
import client.domain.NobleTile; 
import javafx.animation.PauseTransition; 
import javafx.application.Platform; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.Label; 
import javafx.scene.control.SplitPane; 
import javafx.scene.effect.ColorAdjust; 
import javafx.scene.effect.DropShadow; 
import javafx.scene.effect.Glow; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 
import javafx.util.Duration; 
import networkcommunication.domain.ActionTakeThreeTokens; 
import networkcommunication.domain.ActionTakeTwoTokens; 
import server.application.GameController; 

public class MainController implements Initializable, Repaintable { 

    @FXML 
    protected ImageView top1; 
    @FXML 
    protected ImageView top2; 
    @FXML 
    protected ImageView top3; 
    @FXML 
    protected ImageView top4; 
    @FXML 
    protected ImageView center1; 
    @FXML 
    protected ImageView center2; 
    @FXML 
    protected ImageView center3; 
    @FXML 
    protected ImageView center4; 
    @FXML 
    protected ImageView bottom1; 
    @FXML 
    protected ImageView bottom2; 
    @FXML 
    protected ImageView bottom3; 
    @FXML 
    protected ImageView bottom4; 
    @FXML 
    protected ImageView tokenRed7; 
    @FXML 
    protected ImageView tokenBlack7; 
    @FXML 
    protected ImageView tokenBlue7; 
    @FXML 
    protected ImageView tokenYellow5; 
    @FXML 
    protected ImageView tokenGreen7; 
    @FXML 
    protected ImageView tokenWhite7; 
    @FXML 
    protected ImageView noble1; 
    @FXML 
    protected ImageView noble2; 
    @FXML 
    protected ImageView noble3; 
    @FXML 
    protected ImageView noble4; 
    @FXML 
    protected ImageView noble5; 
    @FXML 
    protected ImageView reserve1; 
    @FXML 
    protected ImageView reserve2; 
    @FXML 
    protected ImageView reserve3; 
    @FXML 
    protected ImageView buy1; 
    @FXML 
    protected AnchorPane anchorPane; 

    @FXML 
    protected ImageView currentPosition; 

    @FXML 
    protected VBox buyBox; 
    @FXML 
    protected Button reserve; 
    @FXML 
    protected Button buy; 
    @FXML 
    protected Button goToGameMenu; 
    @FXML 
    protected Button playGame; 
    @FXML 
    protected Button playLocalGame; 
    @FXML 
    protected Button backToMain; 
    @FXML 
    protected Text counterGameYellowToken; 
    @FXML 
    protected Label yellowGameLabel; 
    @FXML 
    protected Label blackGameLabel; 
    @FXML 
    protected Label blueGameLabel; 
    @FXML 
    protected Label greenGameLabel; 
    @FXML 
    protected Label whiteGameLabel; 
    @FXML 
    protected Label redGameLabel; 
    @FXML 
    protected Label yellowOwnLabel; 
    @FXML 
    protected Label blackOwnLabel; 
    @FXML 
    protected Label blueOwnLabel; 
    @FXML 
    protected Label greenOwnLabel; 
    @FXML 
    protected Label whiteOwnLabel; 
    @FXML 
    protected Label redOwnLabel; 
    @FXML 
    protected CheckBox checkBox; 
    @FXML 
    protected ColorAdjust colorConstant = new ColorAdjust(); 
    @FXML 
    protected ImageView optionPreviewCard; 
    @FXML 
    protected HBox buyHbox; 

    private int[] counter; 
    private int[] saveInt = new int[] {0, 0, 0, 0, 0, 0}; 
    private int[] saveForThree = new int[] {0, 0, 0, 0, 0, 0}; 
    private int[] saveSpecificTokens = new int[] {0, 0, 0, 0, 0, 0}; 
    private int[] previousCounter = new int[] {0, 0, 0, 0, 0, 0}; 
    private Image forReserve; 
    protected List<ImageView> devCardsLevelO; 
    protected List<ImageView> devCardsLevelOO; 
    protected List<ImageView> devCardsLevelOOO; 
    protected List<ImageView> yellowTokens; 
    protected List<ImageView> blackTokens; 
    protected List<ImageView> redTokens; 
    protected List<ImageView> blueTokens; 
    protected List<ImageView> greenTokens; 
    protected List<ImageView> whiteTokens; 
    protected List<ImageView> nobleTilesImgV; 
    protected List<DevelopmentCard> devCards1; 
    protected List<DevelopmentCard> devCards2; 
    protected List<DevelopmentCard> devCards3; 
    protected List<NobleTile> nobleTiles; 
    private List<Label> pressableTokens = new ArrayList<>(); 
    private List<Label> ownTokens = new ArrayList<>(); 
    @FXML 
    protected Label player2view; 
    @FXML 
    protected SplitPane enemySplitPane; 
    @FXML 
    protected ImageView enemyReserve1; 
    @FXML 
    protected ImageView enemyReserve2; 
    @FXML 
    protected ImageView enemyReserve3; 
    @FXML 
    protected HBox enemyReserveBox; 

    @FXML 
    public void changeTokenCount(MouseEvent e) throws IOException { 
    pressableTokens.addAll(
     Arrays.asList(blackGameLabel, whiteGameLabel, redGameLabel, greenGameLabel, blueGameLabel)); 
    ownTokens.addAll(
     Arrays.asList(blackOwnLabel, whiteOwnLabel, redOwnLabel, greenOwnLabel, blueOwnLabel)); 
    for (int cycle = 0; cycle < pressableTokens.size(); cycle++) { 
     if (e.getSource() == pressableTokens.get(cycle) && counter[cycle] < 2) { 

     previousCounter = counter.clone(); 
     counter[cycle]++; 
     pressableTokens.get(cycle).setText("x" + Integer.toString(5 - counter[cycle])); 
     ownTokens.get(cycle).setText("x" + Integer.toString(counter[cycle])); 
     if (counter[cycle] == 2 && lastEntryPosition() == cycle) { 
      System.out.println("I just pressed x" + pressableTokens.get(cycle).getId() + " twice!"); 
     } 
     if (counter[cycle] == 2) { 
      pressableTokens.get(cycle).setDisable(true); 
     } 
     if (tookThreeDifferentTokens()) { 
      System.out.println("I just took three tokens"); 
      ActionTakeThreeTokens tookThree = new ActionTakeThreeTokens(
       StartUI.getClient().getGamestate().whosTurnIsIt(), saveSpecificTokens); 
      StartUI.getClient().addMessage(tookThree); 
      System.out.println(Arrays.toString(saveSpecificTokens)); 
      saveSpecificTokens = new int[] {0, 0, 0, 0, 0, 0}; 
     } 
     System.out.println("I just pressed: " + pressableTokens.get(cycle).getId()); 
     break; 
     } 
    } 

    for (

     int i = 0; i < 4; i++) { 
     setBrightness(devCardsLevelO.get(i), -0.2); 
     setBrightness(devCardsLevelOO.get(i), -0.2); 
     setBrightness(devCardsLevelOOO.get(i), -0.2); 
     colorConstant.setBrightness(-0.2); 

     if (devCards1.get(i).getPriceDiamond() <= counter[2] 
      && devCards1.get(i).getPriceEmerald() <= counter[4] 
      && devCards1.get(i).getPriceSapphire() <= counter[5] 
      && devCards1.get(i).getPriceRuby() <= counter[3] 
      && devCards1.get(i).getPriceOnyx() <= counter[1]) { 
     setBrightness(devCardsLevelO.get(i), 0.35); 
     } 
     if (devCards2.get(i).getPriceDiamond() <= counter[2] 
      && devCards2.get(i).getPriceEmerald() <= counter[4] 
      && devCards2.get(i).getPriceSapphire() <= counter[5] 
      && devCards2.get(i).getPriceRuby() <= counter[3] 
      && devCards2.get(i).getPriceOnyx() <= counter[1]) { 
     setBrightness(devCardsLevelOO.get(i), 0.35); 
     } 
     if (devCards3.get(i).getPriceDiamond() <= counter[2] 
      && devCards3.get(i).getPriceEmerald() <= counter[4] 
      && devCards3.get(i).getPriceSapphire() <= counter[5] 
      && devCards3.get(i).getPriceRuby() <= counter[3] 
      && devCards3.get(i).getPriceOnyx() <= counter[1]) { 
     setBrightness(devCardsLevelOOO.get(i), 0.35); 
     } 
    } 
    System.out.println("counter: " + Arrays.toString(counter) + "\tpreviousCounter: " 
     + Arrays.toString(previousCounter) + "\tsaveThree: " + Arrays.toString(saveForThree) 
     + "\tYou took those different tokens: " + Arrays.toString(saveSpecificTokens)); 
    System.out.println(""); 
    } 

    @FXML 
    public void manageCardClick(MouseEvent e) throws IOException { 
    if (e.getSource() == reserve) { 
     setReserveImage(forReserve); 
     buyBox.setVisible(false); 
     counter[0]++; 
     yellowGameLabel.setText("x" + Integer.toString(4 - counter[0])); 
     yellowOwnLabel.setText("x" + Integer.toString(counter[0])); 
    } else if (e.getSource() == buy) { 
     setBuyImage(forReserve); 
     buyBox.setVisible(false); 
     blackGameLabel 
      .setText("x" + Integer.toString(5 - counter[1] + devCards1.get(1).getPriceOnyx())); 
     blackOwnLabel.setText("x" + Integer.toString(counter[1] - devCards1.get(1).getPriceOnyx())); 
     redGameLabel 
      .setText("x" + Integer.toString(5 - counter[3] + devCards1.get(1).getPriceRuby())); 
     redOwnLabel.setText("x" + Integer.toString(counter[3] - devCards1.get(1).getPriceRuby())); 
     blueGameLabel 
      .setText("x" + Integer.toString(5 - counter[5] + devCards1.get(1).getPriceSapphire())); 
     blueOwnLabel 
      .setText("x" + Integer.toString(counter[5] - devCards1.get(1).getPriceSapphire())); 
     greenGameLabel 
      .setText("x" + Integer.toString(5 - counter[4] + devCards1.get(1).getPriceEmerald())); 
     greenOwnLabel 
      .setText("x" + Integer.toString(counter[4] - devCards1.get(1).getPriceEmerald())); 
     whiteGameLabel 
      .setText("x" + Integer.toString(5 - counter[2] + devCards1.get(1).getPriceDiamond())); 
     whiteOwnLabel 
      .setText("x" + Integer.toString(counter[2] + devCards1.get(1).getPriceDiamond())); 
    } 
    } 

    private int lastEntryPosition() { 
    int out = -1; 
    for (int i = 0; i < counter.length; i++) { 
     if (counter[i] - previousCounter[i] != 0) { 
     out = i; 
     break; 
     } 
    } 
    System.out.println("Position: " + out); 
    return out; 
    } 

    private boolean tookThreeDifferentTokens() { 
    int countToThree = 0; 
    for (int i = 0; i < counter.length; i++) { 
     if (counter[i] - saveForThree[i] != 0) { 
     countToThree++; 
     } 
    } 
    System.out.println(countToThree); 
    if (countToThree == 3) { 
     for (int j = 0; j < counter.length; j++) { 
     saveSpecificTokens[j] = counter[j] - saveForThree[j]; 
     } 
     saveForThree = counter.clone(); 
     return true; 
    } else { 
     return false; 
    } 
    } 

    @FXML 
    protected void handleButtonAction(ActionEvent e) throws IOException { 
    Stage stage; 

    Parent root; 

    if (e.getSource() == goToGameMenu) { 
     stage = (Stage) goToGameMenu.getScene().getWindow(); 
     root = FXMLLoader.load(getClass().getResource("GameMenu.fxml")); 
    } else { 
     stage = (Stage) playGame.getScene().getWindow(); 
     root = FXMLLoader.load(getClass().getResource("Main.fxml")); 
    } 

    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 

    } 

    public void hideImgView(ImageView imgV) { 
    imgV.setVisible(false); 
    } 

    public void selectDevCard(ImageView imgV) { 
    if (imgV.getScaleX() == 1.0) { 
     imgV.setEffect(new Glow(0.7)); 
     imgV.setScaleX(1.15); 
     imgV.setScaleY(1.15); 
    } else { 
     DropShadow shadow = new DropShadow(); 
     imgV.setEffect(shadow); 
     imgV.setScaleX(1.0); 
     imgV.setScaleY(1.0); 
    } 
    } 

    public void setReserveImage(Image im) throws IOException { 
    if (reserve1.getImage() == null) { 
     reserve1.setImage(im); 
     setNewCard(); 
    } else if (reserve2.getImage() == null) { 
     reserve2.setImage(im); 
     setNewCard(); 
    } else if (reserve3.getImage() == null) { 
     reserve3.setImage(im); 
     setNewCard(); 

    } else { 
     Stage warning = new Stage(); 
     Parent root = FXMLLoader.load(getClass().getResource("Warning.fxml")); 
     Scene warningScene = new Scene(root); 
     warning.setScene(warningScene); 
     warning.show(); 
     PauseTransition delay = new PauseTransition(Duration.seconds(5)); 
     delay.setOnFinished(e -> warning.close()); 
     delay.play(); 
    } 

    } 

    public void setBuyImage(Image im) { 
    ImageView buyView = new ImageView(optionPreviewCard.getImage()); 
    buyView.fitHeightProperty().bind(buyHbox.heightProperty()); 
    buyView.setPreserveRatio(true); 
    buyHbox.getChildren().add(buyView); 
    setNewCard(); 
    } 

    public void setImageEffect(ImageView imageView, double brightness) { 
    ColorAdjust colorAdjust = new ColorAdjust(); 
    colorAdjust.setBrightness(brightness); 
    imageView.addEventFilter(MouseEvent.MOUSE_ENTERED, e -> imageView.setEffect(colorAdjust)); 
    imageView.addEventFilter(MouseEvent.MOUSE_EXITED, e -> imageView.setEffect(colorConstant)); 
    } 

    public void setBrightness(ImageView imageView, double brightness) { 
    ColorAdjust colorAdjust = new ColorAdjust(); 
    colorAdjust.setBrightness(brightness); 
    imageView.setEffect(colorAdjust); 
    } 

    private void setNewCard() { 
    for (int i = 0; i < 4; i++) { 
     if (devCardsLevelO.get(i).getImage() == null) { 
     devCardsLevelO.get(i) 
      .setImage(new Image(this.getClass().getResourceAsStream(devCards1.get(4).getPath()))); 
     } 
     if (devCardsLevelOO.get(i).getImage() == null) { 
     devCardsLevelOO.get(i) 
      .setImage(new Image(this.getClass().getResourceAsStream(devCards2.get(4).getPath()))); 
     } 
     if (devCardsLevelOOO.get(i).getImage() == null) { 
     devCardsLevelOOO.get(i) 
      .setImage(new Image(this.getClass().getResourceAsStream(devCards3.get(4).getPath()))); 
     } 
    } 
    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
    StartUI.getRepaintThread().addInterface(this); 
    this.counter = new int[6]; 
    this.saveInt = new int[6]; 
    for (int i = 0; i < this.counter.length; i++) { 
     this.counter[i] = 0; 
     this.saveInt[i] = 0; 
    } 

    this.devCardsLevelO = new ArrayList<ImageView>(); 
    this.devCardsLevelOO = new ArrayList<ImageView>(); 
    this.devCardsLevelOOO = new ArrayList<ImageView>(); 
    this.yellowTokens = new ArrayList<ImageView>(); 
    this.blackTokens = new ArrayList<ImageView>(); 
    redTokens = new ArrayList<ImageView>(); 
    this.blueTokens = new ArrayList<ImageView>(); 
    this.greenTokens = new ArrayList<ImageView>(); 
    this.whiteTokens = new ArrayList<ImageView>(); 
    this.nobleTilesImgV = new ArrayList<ImageView>(); 

    this.devCards1 = new ArrayList<DevelopmentCard>(); 
    this.devCards2 = new ArrayList<DevelopmentCard>(); 
    this.devCards3 = new ArrayList<DevelopmentCard>(); 
    this.nobleTiles = new ArrayList<NobleTile>(); 

    this.devCardsLevelO.addAll(Arrays.asList(bottom1, bottom2, bottom3, bottom4)); 
    this.devCardsLevelOO.addAll(Arrays.asList(center1, center2, center3, center4)); 
    this.devCardsLevelOOO.addAll(Arrays.asList(top1, top2, top3, top4)); 
    this.nobleTilesImgV.addAll(Arrays.asList(noble1, noble2, noble3, noble4, noble5)); 


    for (int i = 0; i < devCardsLevelO.size(); i++) { 
     int k = i; 
     setImageEffect(devCardsLevelO.get(k), 0.2); 

     devCardsLevelO.get(i).setSmooth(true); 
     devCardsLevelO.get(i).setOnMouseClicked(e -> { 
     forReserve = devCardsLevelO.get(k).getImage(); 
     optionPreviewCard.setImage(forReserve); 
     buyBox.setVisible(true); 
     devCards1.get(k).setSelectable(false); 
     devCardsLevelO.get(k).setImage(null); 
     }); 

     setImageEffect(devCardsLevelOO.get(k), 0.2); 
     devCardsLevelOO.get(k).setOnMouseClicked(e -> { 
     buyBox.setVisible(true); 
     forReserve = devCardsLevelOO.get(k).getImage(); 
     optionPreviewCard.setImage(forReserve); 
     devCards2.get(k).setSelectable(false); 
     devCardsLevelOO.get(k).setImage(null); 
     }); 

     setImageEffect(devCardsLevelOOO.get(k), 0.2); 
     devCardsLevelOOO.get(k).setOnMouseClicked(e -> { 
     buyBox.setVisible(true); 
     forReserve = devCardsLevelOOO.get(k).getImage(); 
     optionPreviewCard.setImage(forReserve); 
     devCards3.get(k).setSelectable(false); 
     devCardsLevelOOO.get(k).setImage(null); 
     }); 
    } 

    } 

    @Override 
    public void update() { 
    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
     devCards1 = StartUI.getClient().getGamestate().getDevelopmentCardsLevelO(); 
     devCards2 = StartUI.getClient().getGamestate().getDevelopmentCardsLevelOO(); 
     devCards3 = StartUI.getClient().getGamestate().getDevelopmentCardsLevelOOO(); 
     nobleTiles = StartUI.getClient().getGamestate().getNobleTiles(); 
     for (int i = 0; i < nobleTilesImgV.size(); i++) { 
      if (nobleTiles.get(i).isSelectable()) { 
      nobleTilesImgV.get(i).setImage(
       new Image(this.getClass().getResourceAsStream(nobleTiles.get(i).getPath()))); 
      } 
     } 
     for (int i = 0; i < devCardsLevelO.size(); i++) { 
      if (devCards1.get(i).isSelectable()) { 
      devCardsLevelO.get(i).setImage(
       new Image(this.getClass().getResourceAsStream(devCards1.get(i).getPath()))); 
      } 
     } 
     for (int i = 0; i < devCardsLevelOO.size(); i++) { 
      if (devCards2.get(i).isSelectable()) { 
      devCardsLevelOO.get(i).setImage(
       new Image(this.getClass().getResourceAsStream(devCards2.get(i).getPath()))); 
      } 
     } 
     for (int i = 0; i < devCardsLevelOOO.size(); i++) { 
      if (devCards3.get(i).isSelectable()) { 
      devCardsLevelOOO.get(i).setImage(
       new Image(this.getClass().getResourceAsStream(devCards3.get(i).getPath()))); 
      } 
     } 
     } 
    }); 
    } 
} 

Ich arbeitete den Bohrtag darauf und konnte immer noch nicht herausfinden, was diesen Fehler verursacht. Es fängt an, sehr frustrierend zu werden und es wäre toll, wenn wir das beheben könnten :)

+0

Der erste Fehler besagt, dass das Problem beim Laden von 'Main.fxml' auftritt. Da der Ladevorgang fehlschlägt, haben Sie ein Null-Root-Verzeichnis, und die von Ihnen gepostete Ausnahme weist darauf hin, dass die Szene keinen Null-Root laden konnte. Können Sie 'e1.printStackTrace()' zur catch-Klausel 'catch (Exception e1) {}' hinzufügen, erneut ausführen und die Exception posten? –

+0

Vielen Dank für die schnelle Antwort! Beeindruckend! Ich konnte das Problem mit e1.printStackTrace() beheben, weil es mir einen zusätzlichen Fehler und die genaue Zeile zu dem Problem gab. Das habe ich mit System.out.print (e1.getStackTrace()) nicht gesehen. Vielen Dank! :) – tripleSevenNine

Antwort

0

vom Lesen Ihres StackTrace sehe ich die folgende Zeile: Caused by: java.lang.NullPointerException: Root cannot be null. Das bedeutet, dass Sie die Root nicht auf null setzen können. In einem Ihrer Schnipsel Sie die folgenden Zeilen haben:

@FXML private void handleButtonAction(ActionEvent e) { Stage stage = null; Parent root = null;

Sie Sie Parent zuweisen einen Nullwert zu haben, dass die NullPointException Sie bekommen verursachen. Ich schlage vor, Sie entfernen den null Wert, den Sie dem Parent zuweisen.

+0

Danke für die schnelle Antwort! Es ist, dass Wurzel Null bleibt. Aber diese Zeilen werden benötigt, um Stufe und Wurzel zu initialisieren. Das Problem ist, dass root mit FXMLLoader.load (...) zugewiesen werden sollte. Dies funktioniert mit jeder anderen Szene, zu der ich wechseln möchte, außer mit Main.fxml. – tripleSevenNine

+0

FXMLLoader.load (getClass(). GetResource ("Main.fxml")); gibt null zurück, aber ich verstehe nicht warum. – tripleSevenNine

Verwandte Themen