Home > Enterprise >  Java Null Pointer Exception for JSON Object
Java Null Pointer Exception for JSON Object

Time:11-14

This is my code and it throws java null pointer exception at a particular JSON Object in my code, named "films". I don't understand why it deems this as "null". Where the error is being given, is where the code should read the contents of the txt file based on the method "readJSONFile". This method adds the elements of the txt file to a list. The new film to be added needs to be added to the JSON object but this does not work as films is apparently "null".

package application;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

import org.json.simple.JSONObject;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;

public class FilmManagement {
    
    private File selectedImage;
    
    @FXML
    private Button backBtn, homeBtn, uploadImageBtn, viewFilmsBtn, addFilmBtn;
    @FXML
    private Text newFilmTitle, newFilmDescription, newFilmTime1, newFilmTime2, newFilmTime3, newFilmAge, newFilmRating;
    @FXML
    private Label  newFilmStartDate, newFilmEndDate;
    @FXML
    private TextArea filmDescription;
    @FXML
    private DatePicker filmStartDate, filmEndDate;
    @FXML
    private TextField filmTitle, filmTrailer, filmRating;
    @FXML
    private ComboBox<String> filmTime1, filmTime2, filmTime3, filmAge;
    @FXML
    private ImageView uploadedFilmPoster;
    
    @FXML
    void initialize() throws IOException{
        ObservableList<String> obsList1 = FXCollections.observableArrayList("13:00", "14:00", "15:00", "16:00", "17:00",
                "18:00", "19:00", "20:00", "21:00", "22:00", "23:00", "00:00", "01:00", "02:00", "03:00");
        ObservableList<String> obsList2 = FXCollections.observableArrayList("U", "PG", "12A", "15", "18", "R");
        filmAge.setItems(obsList2);
        filmAge.setValue("12A");
        newFilmAge.setText("12A");
        filmTime1.setItems(obsList1);
        filmTime2.setItems(obsList1);
        filmTime3.setItems(obsList1);
        filmTime1.setValue("21:00");
        newFilmTime1.setText("21:00");
        filmStartDate.setValue(LocalDate.now());
        LocalDate startDate = filmStartDate.getValue();
        String startDateFormatted = startDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
        newFilmStartDate.setText(startDateFormatted);
    }
    
    public void goBack(ActionEvent event) throws IOException{
        Main m = new Main();
        m.changeScene("Employee Home.fxml");
    }
    
    public void goHome(ActionEvent event) throws IOException{
        Main m = new Main();
        m.changeScene("Employee Home.fxml");
    }
    
    public void goToViewFilms(ActionEvent event) throws IOException{
        Main m = new Main();
        m.changeScene("View Films.fxml");
    }
    
    //Method that gets called every time the user enters a date, time or age when adding a new movie.
    @FXML
    public void updateDateTimeAge(ActionEvent e) {

        try {
            switch (((Node) e.getSource()).getId()) {
            case "filmStartDate":
                LocalDate startDate = filmStartDate.getValue();
                String startDateFormatted = startDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
                newFilmStartDate.setText(startDateFormatted);
                break;
            case "filmEndDate":
                LocalDate endDate = filmEndDate.getValue();
                String endDateFormatted = endDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
                newFilmEndDate.setText(endDateFormatted);
                break;
            case "filmTime1":
                newFilmTime1.setText(filmTime1.getValue().toString());
                break;
            case "filmTime2":
                newFilmTime2.setText(filmTime2.getValue().toString());
                break;
            case "filmTime3":
                newFilmTime3.setText(filmTime3.getValue().toString());
                break;
            case "filmAge":
                newFilmAge.setText(filmAge.getValue().toString());
                break;
            }
        } catch (NullPointerException ex) {
            ex.getMessage();
        }
    }
    
    
    //Method that gets called every time the user types in any TextField when adding a movie
    @FXML
    public void updateFilmText(KeyEvent e) {

        switch (((Node) e.getSource()).getId()) {
        case "filmTitle":
            if (filmTitle.getText().length() > 20) {
                filmTitle.setEditable(false);
            }
            break;
        case "filmDescription":
            if (filmDescription.getText().length() > 220) {
                filmDescription.setEditable(false);
            }
            break;
        case "filmRating":
            //String ratingRegex = "^([1-9]\\d*|0)(\\.\\d)?$";
            //Pattern p = Pattern.compile(ratingRegex)
            if (Float.parseFloat(filmRating.getText()) > 10) {
                filmRating.setEditable(false);
            }
            break;
        }

        if (e.getCode().equals(KeyCode.BACK_SPACE)) {
            filmTitle.setEditable(true);
            filmDescription.setEditable(true);
            filmRating.setEditable(true);
        }

        switch (((Node) e.getSource()).getId()) {
        case "filmTitle":
            newFilmTitle.setText(filmTitle.getText());
            break;
        case "filmDescription":
            newFilmDescription.setText(filmDescription.getText());
            break;
        case "filmRating":
            newFilmRating.setText(filmRating.getText() "/10");
            break;
        }
    }
    
    //Method that gets called when the user clicks on the upload image button
    @FXML
    public void uploadImage(ActionEvent event) throws IOException {

        try {
            FileChooser fc = new FileChooser();
            selectedImage = fc.showOpenDialog(null);
            // checking that input file is not null and handling the exception
            if (selectedImage == null)
                return;
            else if (ImageIO.read(selectedImage) == null) {
                Alert alert = new Alert(AlertType.WARNING, "Please upload an image in JPG or PNG format!",
                        ButtonType.OK);
                alert.showAndWait();
                if (alert.getResult() == ButtonType.OK) {
                    return;
                }
            } else {
                Image img = SwingFXUtils.toFXImage(ImageIO.read(selectedImage), null);
                uploadedFilmPoster.setImage(img);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    @SuppressWarnings("unchecked")
    @FXML
    public void storeFilmInfo(ActionEvent event) throws ParseException {

        try {
            validateFilmInput();

            // creating JSON objects
            JSONObject films = Main.readJSONFile("films.txt");
            JSONObject filmToAdd = new JSONObject();
            filmToAdd.put("description", filmDescription.getText());
            filmToAdd.put("trailer", filmTrailer.getText());
            filmToAdd.put("startDate", newFilmStartDate.getText());
            filmToAdd.put("endDate", newFilmEndDate.getText());
            filmToAdd.put("time1", newFilmTime1.getText());
            filmToAdd.put("time2", newFilmTime2.getText());
            filmToAdd.put("time3", newFilmTime3.getText());
            filmToAdd.put("age", newFilmAge.getText());
            filmToAdd.put("rating", newFilmRating.getText());
            films.put(filmTitle.getText(), filmToAdd);
            //System.out.println(films.toJSONString());

            // storing film in JSON file - filewriting 
            String path = "C:\\Users\\ruben\\OneDrive\\Documents\\Ruben School\\Year 12\\Computer Science\\IA\\films.txt";
            // System.out.println(path);
            PrintWriter writer = new PrintWriter(new File(path));
            writer.print(films.toJSONString());
            writer.close();

            // storing film poster in film images folder
            String folderPath = "C:\\Users\\ruben\\eclipse-workspace\\Clubhouse Cinemas\\src\\Images";
            File uploads = new File(folderPath);
            File file = new File(uploads, filmTitle.getText()   ".png");
            InputStream input = Files.newInputStream(selectedImage.toPath());
            Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
            // confirmation alert to inform the employee of the newly added film
            Alert alert = new Alert(AlertType.INFORMATION, "The film "   filmTitle.getText()   " has been added!",
                    ButtonType.OK);
            alert.showAndWait();

            // reloading film list to include the recently added film, and
            // restoring all fields to empty
            // and closing alert on click
            if (alert.getResult() == ButtonType.OK) {
                Main.resetFilmList();
                Main.readJSONFile("films.txt"); //method in main for file reading - adds items to the list
                filmDescription.setText("");
                filmDescription.setText("");
                filmTitle.setText("");
                filmStartDate.setPromptText("dd/MM/yyyy");
                filmEndDate.setPromptText("dd/MM/yyyy");
                filmTime1.setPromptText("hh:mm");
                filmTime2.setPromptText("hh:mm");
                filmTime3.setPromptText("hh:mm");
                filmAge.setPromptText("");
                filmRating.setText("");
                alert.close();
            }
        } catch (FileNotFoundException e) {
            Alert alert = new Alert(AlertType.WARNING, "File Not Found!", ButtonType.OK);
            alert.showAndWait();
            if (alert.getResult() == ButtonType.OK) {
                alert.close();
            }
        } catch (IOException e) {
            Alert alert = new Alert(AlertType.WARNING, "Error: "   e.getMessage(), ButtonType.OK);
            alert.showAndWait();
            if (alert.getResult() == ButtonType.OK) {
                alert.close();
            }
        } catch (InvalidFilmInputException e) {
            Alert alert = new Alert(AlertType.WARNING, e.getMessage(), ButtonType.OK);
            alert.showAndWait();
            if (alert.getResult() == ButtonType.OK) {
                alert.close();
            }
        }
    }
    
    @SuppressWarnings("unlikely-arg-type")
    void validateFilmInput() throws InvalidFilmInputException, ParseException {

        try {
            if (filmTitle.getText().equals("") || filmDescription.getText().equals("")
                    || filmTrailer.getText().equals("") || filmStartDate.getValue().equals("dd/MM/yyyy")
                    || filmEndDate.getValue().equals("dd/MM/yyyy") || filmAge.getValue().equals("") || filmRating.getText().equals(""))
                throw new InvalidFilmInputException("Please complete all fields!");
            else if (selectedImage == null)
                throw new InvalidFilmInputException("Please add the film poster!");
            else if (filmStartDate.getValue().compareTo(LocalDate.now()) < 0)
                throw new InvalidFilmInputException("Start date cannot be before today!");
            else if (filmStartDate.getValue().compareTo(filmEndDate.getValue()) == 0)
                throw new InvalidFilmInputException("Screenings cannot start and end on the same day!");
            else if (filmStartDate.getValue().compareTo(filmEndDate.getValue()) > 0)
                throw new InvalidFilmInputException("End date cannot be before start date!");
            

            // checking that the title of the movie is unique
            for (Film c : Main.getFilmList()) {
                if (c.getTitle().equals(filmTitle.getText()))
                    throw new InvalidFilmInputException(
                            "The title "   filmTitle.getText()   " belongs to another scheduled movie!");
            }

            // looping through the films to find date and time conflicts
            for (Film c : Main.getFilmList()) {

                // converting movie start and end dates to LocalDate for
                // comparison
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
                LocalDate startDateFilms = LocalDate.parse(c.getStartDate(), formatter);
                LocalDate endDateFilms = LocalDate.parse(c.getEndDate(), formatter);

                // if the dates overlap...
                if (!(filmStartDate.getValue().compareTo(endDateFilms) > 0
                        || filmEndDate.getValue().compareTo(startDateFilms) < 0)) {

                    // System.out.println("startDate loop: "   startDateFilms);
                    // System.out.println("endDate loop: "   endDateFilms);

                    // ... and the time(s) overlap as well
                    String[] times = c.getTimes();
                    if (Arrays.asList(times).contains(filmTime1.getValue())
                            || Arrays.asList(times).contains(filmTime2.getValue())
                            || Arrays.asList(times).contains(filmTime3.getValue())) {
                        throw new InvalidFilmInputException("The screening time(s) of your film: "   filmTitle.getText()
                                  " overlap(s) with the film: "   c.getTitle().toString()   "!");
                    }
                }
            }
        } catch (NullPointerException e) {
            throw new InvalidFilmInputException("Please complete all fields!");
        }
    }
}

class InvalidFilmInputException extends Exception {

    private static final long serialVersionUID = 1L;

    InvalidFilmInputException(String s) {
        super(s);
    }
}

Below is the errors it gives me:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1724)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Scene$KeyHandler.process(Scene.java:4105)
    at javafx.graphics/javafx.scene.Scene.processKeyEvent(Scene.java:2156)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2630)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:218)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:150)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:250)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:249)
    at javafx.graphics/com.sun.glass.ui.View.handleKeyEvent(View.java:548)
    at javafx.graphics/com.sun.glass.ui.View.notifyKey(View.java:972)
    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:184)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.reflect.InvocationTargetException
    at jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:77)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1852)
    ... 28 more
Caused by: java.lang.NumberFormatException: empty String
    at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
    at java.base/java.lang.Float.parseFloat(Float.java:461)
    at application.FilmManagement.updateFilmText(FilmManagement.java:150)
    ... 38 more
Unexpected token END OF FILE at position 0.
    at org.json.simple.parser.JSONParser.parse(Unknown Source)
    at org.json.simple.parser.JSONParser.parse(Unknown Source)
    at application.Main.readJSONFile(Main.java:83)
    at application.FilmManagement.storeFilmInfo(FilmManagement.java:210)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:77)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1852)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1724)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8792)
    at javafx.controls/javafx.scene.control.Button.fire(Button.java:203)
    at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208)
    at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3897)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1878)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2623)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
    at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:557)
    at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:943)
    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:184)
    at java.base/java.lang.Thread.run(Thread.java:832)
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1724)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8792)
    at javafx.controls/javafx.scene.control.Button.fire(Button.java:203)
    at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208)
    at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3897)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1878)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2623)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
    at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:557)
    at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:943)
    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:184)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:77)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1852)
    ... 46 more
Caused by: java.lang.NullPointerException: Cannot invoke "org.json.simple.JSONObject.put(Object, Object)" because "films" is null
    at application.FilmManagement.storeFilmInfo(FilmManagement.java:221)
    ... 57 more

CodePudding user response:

Your movies are not null, that's not the problem.

This is your error:

Caused by: java.lang.NumberFormatException: empty String.

This is mean that your JSONParser try to parse an empty string to a number. You need to check if all entries have the valid format.

  • Related