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.