0

maincontroller

package treetest;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;



/**
 *
 * @author akhil kumar
 */
public class maincontroller {

    @FXML
    private GraphicsContext gc;
    private Canvas canvas;
    private TreeView<String> bro;
    TreeItem<String> root=new TreeItem<>("root");
    TreeItem<String> child = new TreeItem<>("child");
    TreeItem<String> child2 = new TreeItem<>("child");
    TreeItem<String> child3 = new TreeItem<>("child");
    TreeItem<String> child4 = new TreeItem<>("child");
    TreeItem<String> child5 = new TreeItem<>("child");

    public void initialize(){

         root.getChildren().add(child);
         root.getChildren().add(child2);
         root.getChildren().add(child3);
         root.getChildren().add(child4);
         root.getChildren().add(child5);

        bro.setRoot(root);
        bro.setShowRoot(false);
       gc=canvas.getGraphicsContext2D();
       gc.setFill(Color.WHITE);
       gc.fillRect(0,0,canvas.getWidth(),canvas.getHeight());

    }


}

fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.canvas.*?>
<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="600.0" minWidth="800.0" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="treetest.maincontroller">
   <top>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <MenuBar>
              <menus>
                <Menu mnemonicParsing="false" text="File">
                  <items>
                    <MenuItem mnemonicParsing="false" text="Close" />
                  </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Edit">
                  <items>
                    <MenuItem mnemonicParsing="false" text="Delete" />
                  </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Help">
                  <items>
                    <MenuItem mnemonicParsing="false" text="About" />
                  </items>
                </Menu>
              </menus>
            </MenuBar>
            <HBox>
               <children>
                  <Button fx:id="catchment" mnemonicParsing="false" text="Button" />
                  <Button fx:id="output" mnemonicParsing="false" text="Button" />
                  <Button fx:id="junction" mnemonicParsing="false" text="Button" />
                  <Button fx:id="run" mnemonicParsing="false" text="Button" />
               </children>
               <padding>
                  <Insets bottom="10.0" left="10.0" top="10.0" />
               </padding>
            </HBox>
         </children>
      </VBox>
   </top>
   <center>
      <Canvas fx:id="canvas" height="533.0" width="592.0" BorderPane.alignment="CENTER">
         <cursor>
            <Cursor fx:constant="CROSSHAIR" />
         </cursor>
      </Canvas>
   </center>
   <left>
      <TreeView fx:id="bro" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </left>
</BorderPane>

even though the fx : ids of the canvas and treeview are matching with the ones in the emain controller i am getting a null pointer exception

at the lines

bro.setRoot(root)
bro.setShowRoot(false);
gc=canvas.getGraphicsContext2D();


basically in any line itry to use the canvas and treeview i am getting a nullpointer exception 


error log 

file:/C:/Users/akhil%20kumar/Documents/NetBeansProjects/treetest/dist/run720357897/treetest.jar!/treetest/tree.fxml

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2571)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at treetest.Treetest.start(Treetest.java:30)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    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)
Caused by: java.lang.reflect.InvocationTargetException
    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.loadImpl(FXMLLoader.java:2566)
    ... 17 more
Caused by: java.lang.NullPointerException
    at treetest.maincontroller.initialize(maincontroller.java:52)
    ... 27 more

what is wrong with my code ?

line 52 is

bro.setRoot(root);

the weird part is when i remove all the lines with the graphiccontext gc and the canvas in the initialise function it completly works fine.

this is specific too javafx of why the controller is not able to find the objects in the fxml file hence a general answer for nullpointer exceptions might not help me

not able to understand why this is happening ?

  • Which is line 52? – Andy Turner Mar 26 '17 at 21:56
  • bro.setRoot(root); – BANDREVU AKHIL KUMAR Mar 26 '17 at 21:57
  • 1
    the only reference you have to your FXML there is the first `private GraphicsContext gc;` if the object is in your FXML then it needs to have @FXML before each of the variables, for example `@FXML TreeView bro;` would tell the controller that, that specific variable is a reference to the FXML, if it is not on all the Variables that is reference on the FXML that variable will be seen as a new variable. – TravisF Mar 27 '17 at 03:49
  • the second link @AndyTurner has referenced in the 'Already has an answer' will give you more information. – TravisF Mar 27 '17 at 03:58

0 Answers0