D. McCann
D. McCann

Reputation: 3

Having issues creating a 2d array of javafx shapes as it cannot have values assigned

ive been looking a while and unable to find a solution to this one. Basically on the code below the line Circle[][] board = new Circle[rows][column]; is giving me issues when i try to assign any values to these circles due to them being null. Ive been trying to add curly brackets like this Circle[][] board = new Circle(0)[rows][column]; which would fix the issue but then it says Array type expected; found javafx.scene.shape.Circle Ive added my code for this class as well as my error code. If any other code is required let me know and thanks in advance for any help. Code:

package com.company;


import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class SetupBoard {

    public void main(Stage stage) {
        int rows = 8;
        int column = 8;
        Circle[][] board = new Circle[rows][column];
        int rowcounter = 0;
        int columncounter = 0;
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < column; j++) {
                board[i][j].setRadius(0);
            }
        }


            while (rowcounter < 3) {
                if (columncounter == 9) {
                    columncounter = 0;
                }
                if (columncounter == 8) {
                    columncounter = 1;
                }
                while (columncounter < 8) {
                    board[rowcounter][columncounter].setRadius(20);
                    columncounter = columncounter + 2;
                }
                rowcounter++;
            }

            rowcounter = 5;
            columncounter = 1;

            while (rowcounter < 8) {
                if (columncounter == 9) {
                    columncounter = 0;
                }
                if (columncounter == 8) {
                    columncounter = 1;
                }
                while (columncounter < 8) {
                    board[rowcounter][columncounter].setRadius(20);
                    columncounter = columncounter + 2;

                    int centrex;
                    int centrey;
                    centrex = 75 + (50 * rowcounter);
                    centrey = 125 + (50 * columncounter);

                    board[rowcounter][columncounter].setStroke(Color.BLUE);
                    board[rowcounter][columncounter].setFill(Color.BLUE);
                    board[rowcounter][columncounter].setCenterX(centrex);
                    board[rowcounter][columncounter].setCenterY(centrey);


                }
                rowcounter++;
            }


            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < column; j++) {
                    //System.out.print(board[i][j]);
                    //Group root = new Group((board[i][j]));
                    //Scene scene = new Scene(root, 600, 600);
                    //stage.setScene(scene);
                    //stage.show();
                }
                System.out.println("");
            }

        }


    }

and the error:

> Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
    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:352)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:388)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
    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)
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:497)
    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:497)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
    ... 48 more
Caused by: java.lang.NullPointerException
    at com.company.SetupBoard.main(SetupBoard.java:19)
    at com.company.Screens.MainWindow.BtnPress_start(MainWindow.java:25)
    ... 58 more*

Upvotes: 0

Views: 220

Answers (1)

LppEdd
LppEdd

Reputation: 21114

Circle[][] board = new Circle[rows][column];

Here you just initialized the array.
That means you told the JVM "hey! Look, I need this space for my elements to be stored here!".
The JVM then responded by giving you a pointer to that space. Each matrix position represent a point inside that empty space.

 ____________________
| null | null | null |
|______|______|______|
| null | null | null |
|______|______|______|
| null | null | null |
|______|______|______|

for (int i = 0; i < rows; i++) {
   for (int j = 0; j < column; j++) {
      board[i][j].setRadius(0);
   }
}

Here you're trying to call setRadius an a null reference, which is the default valid value for an empty space. Before doing that you need to initialize the Circle(s), in the same way

for (int i = 0; i < rows; i++) {
   for (int j = 0; j < column; j++) {
      board[i][j] = new Circle();
   }
}

Upvotes: 1

Related Questions