I am working on a library Management System (LMS) project. I am using Apache NetBeans 11.3 and JDK 8 and I have a problem in inserting data into MySQL, when I want to insert students table data into MySQL without image this NullPointerException
error occurred. I know this errors says me to insert image with my data too, but sometimes I want to insert students table data into database without any images, what can I do for it to work well.
This error occurred:
java.lang.NullPointerException
at ulms.ui.addStudents.AddStudentsController.addStudents(AddStudentsController.java:226)
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$MethodHandler.invoke(FXMLLoader.java:1769)
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:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
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$4(WinApplication.java:186)
at java.lang.Thread.run(Thread.java:748)
AddStudentsController.java
package ulms.ui.addStudents;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXComboBox;
import com.jfoenix.controls.JFXTextField;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;
import java.sql.*;
import javafx.scene.control.Alert;
import javafx.stage.Stage;
import java.io.*;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.FileChooser;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
public class AddStudentsController implements Initializable {
Connection con;
PreparedStatement pst;
ResultSet rs;
@FXML
private AnchorPane rootAnchorS;
@FXML
private JFXTextField txtSID;
@FXML
private JFXTextField txtSName;
@FXML
private JFXTextField txtSFName;
@FXML
private JFXComboBox<String> cbxSFaculty;
@FXML
private JFXComboBox<String> cbxSDep;
@FXML
private JFXComboBox<String> cbxSYear;
@FXML
private JFXComboBox<String> cbxSSemister;
@FXML
private JFXButton btnCancelS;
@FXML
private JFXButton btnSaveS;
@FXML
private ImageView viewSImage;
@FXML
private JFXButton btnSImage;
private FileChooser fileChooser;
private File file;
private Stage stage;
private Image image;
private FileInputStream fis;
private BufferedImage bimg;
@Override
public void initialize(URL url, ResourceBundle rb) {
Random();
SFaculty();
SDep();
SYear();
SSemister();
}
public void Random(){
Random rand = new Random();
txtSID.setText("" + rand.nextInt(1000000 + 1));
}
public void SFaculty(){
cbxSFaculty.getItems().add(("کمپیوترساینس"));
cbxSFaculty.getItems().add(("علوم اجتماعی"));
cbxSFaculty.getItems().add(("اقتصاد"));
cbxSFaculty.getItems().add(("زراعت"));
cbxSFaculty.getItems().add(("حقوق و علوم سیاسی"));
cbxSFaculty.getItems().add(("انجنیری"));
cbxSFaculty.getItems().add(("تعلیم و تربیه"));
cbxSFaculty.getItems().add(("ادبیات"));
cbxSFaculty.getItems().add(("شرعیات"));
cbxSFaculty.getItems().add(("طب"));
}
public void SDep(){
cbxSDep.getItems().add(("مهندسی نرم افزار"));
cbxSDep.getItems().add(("فناوری اطلاعات"));
cbxSDep.getItems().add(("فناوری اطلاعات و ارتباطات"));
cbxSDep.getItems().add(("دیتابیس"));
cbxSDep.getItems().add(("مهندسی شبکه"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("تاریخ"));
cbxSDep.getItems().add(("جفرافیه"));
cbxSDep.getItems().add(("جامعه شناسی"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("منجمنت و اداره تشبثات"));
cbxSDep.getItems().add(("امور مالی و بانکی"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("جنگلات و منابع طبیعی"));
cbxSDep.getItems().add(("علوم حیوانی"));
cbxSDep.getItems().add(("هارتیکلچر یا باغداری"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("قضا و ثارنوالی"));
cbxSDep.getItems().add(("اداره و دیپلوماسی"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("سیول"));
cbxSDep.getItems().add(("میخانیک"));
cbxSDep.getItems().add(("مهندسی"));
cbxSDep.getItems().add(("طراحی شهری"));
cbxSDep.getItems().add(("برق و الکترونیک"));
cbxSDep.getItems().add(("انرژی"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("ریاضی"));
cbxSDep.getItems().add(("فیزیک"));
cbxSDep.getItems().add(("کیمیا"));
cbxSDep.getItems().add(("بیولوژی"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("زبان و ادبیات فارسی دری"));
cbxSDep.getItems().add(("زبان و ادبیات پشتو"));
cbxSDep.getItems().add(("زبان و ادبیات انگلیسی"));
cbxSDep.getItems().add(("زبان و ادبیات عربی"));
cbxSDep.getItems().add(("ژورنالیزم"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("تعلیمات اسلامی"));
cbxSDep.getItems().add(("----------"));
cbxSDep.getItems().add(("طب عمومی"));
}
public void SYear(){
cbxSYear.getItems().add("1");
cbxSYear.getItems().add("2");
cbxSYear.getItems().add("3");
cbxSYear.getItems().add("4");
cbxSYear.getItems().add("5");
cbxSYear.getItems().add("6");
cbxSYear.getItems().add("7");
}
public void SSemister(){
cbxSSemister.getItems().add("1");
cbxSSemister.getItems().add("2");
cbxSSemister.getItems().add("3");
cbxSSemister.getItems().add("4");
cbxSSemister.getItems().add("5");
cbxSSemister.getItems().add("6");
cbxSSemister.getItems().add("7");
cbxSSemister.getItems().add("8");
cbxSSemister.getItems().add("9");
cbxSSemister.getItems().add("10");
cbxSSemister.getItems().add("11");
cbxSSemister.getItems().add("12");
cbxSSemister.getItems().add("13");
cbxSSemister.getItems().add("14");
}
@FXML
private void cancelStudents(ActionEvent event) {
stage = (Stage) rootAnchorS.getScene().getWindow();
stage.close();
}
@FXML
private void addStudents(ActionEvent event) {
String SID = txtSID.getText();
String SName = txtSName.getText();
String SFName = txtSFName.getText();
String SFaculty = cbxSFaculty.getItems().toString();
String SDep = cbxSDep.getItems().toString();
String SYear = cbxSYear.getItems().toString();
String SSemister = cbxSSemister.getItems().toString();
if(SID.isEmpty() || SName.isEmpty() || SFName.isEmpty() || SFaculty.isEmpty() || SDep.isEmpty() ||
SYear.isEmpty() || SSemister.isEmpty()){
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setHeaderText(null);
alert.setTitle("خطا");
alert.setContentText("لطفا تمام فیلد ها را پر کنید");
alert.showAndWait();
}
else{
String addStudent = "insert into students (SID, SName, SFName, Faculty, Department, Year, Semister, SImage) values (?,?,?,?,?,?,?,?)";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = ("jdbc:mysql://localhost:3306/ulms");
String user = "root";
String pass = "Mysql786";
con = DriverManager.getConnection(url, user, pass);
pst = con.prepareStatement(addStudent);
pst.setString(1, txtSID.getText());
pst.setString(2, txtSName.getText());
pst.setString(3, txtSFName.getText());
pst.setString(4, (String)cbxSFaculty.getSelectionModel().getSelectedItem());
pst.setString(5, (String)cbxSDep.getSelectionModel().getSelectedItem());
pst.setString(6, (String)cbxSYear.getSelectionModel().getSelectedItem());
pst.setString(7, (String)cbxSSemister.getSelectionModel().getSelectedItem());
pst.setBinaryStream(8, (InputStream)fis, (int)file.length());
pst.executeUpdate();
pst.close();
con.close();
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setHeaderText(null);
alert.setTitle("اطلاعات");
alert.setContentText("دانشجو جدید موفقانه ایجاد شد");
alert.showAndWait();
txtSID.setText("");
txtSName.setText("");
txtSFName.setText("");
SFaculty();
SDep();
SYear();
SSemister();
viewSImage.setImage(null);
Random();
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | SQLException e) {
e.printStackTrace();
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setHeaderText(null);
alert.setTitle("خطا");
alert.setContentText("دانشجو جدید ایجاد نشد");
alert.showAndWait();
} catch(NullPointerException e){
e.printStackTrace();
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setHeaderText(null);
alert.setTitle("خطا");
alert.setContentText("لطفا تصویر را انتخاب کنید");
alert.showAndWait();
}
}
}
@FXML
private void openImageS(ActionEvent event) {
fileChooser = new FileChooser();
FileChooser.ExtensionFilter ext1 = new FileChooser.ExtensionFilter("JPG files(*.jpg)", "*.JPG");
FileChooser.ExtensionFilter ext2 = new FileChooser.ExtensionFilter("PNG files(*.png)", "*.PNG");
FileChooser.ExtensionFilter ext3 = new FileChooser.ExtensionFilter("ICON files(*.ico)", "*.ICO");
fileChooser.getExtensionFilters().addAll(ext1, ext2, ext3);
stage = (Stage) rootAnchorS.getScene().getWindow();
file = fileChooser.showOpenDialog(stage);
if(file != null){
String p = file.getAbsolutePath();
try {
fis = new FileInputStream(file);
bimg = ImageIO.read(file);
image = SwingFXUtils.toFXImage(bimg, null);
image = new Image(file.getAbsoluteFile().toURI().toString(), viewSImage.getFitWidth(), viewSImage.getFitHeight(), true, true);
viewSImage.setImage(image);
viewSImage.setPreserveRatio(true);
} catch (IOException e) {
e.printStackTrace();
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setHeaderText(null);
alert.setTitle("خطا");
alert.setContentText("تصویر وارد نشد");
alert.showAndWait();
}
}
}
}
addStudents.java
package ulms.ui.addStudents;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class addStudents extends Application {
@Override
public void start(Stage stage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("addStudents.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
stage.setTitle("ایجاد دانشجو جدید");
}
public static void main(String[] args) {
launch(args);
}
}
addStudents.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXComboBox?>
<?import com.jfoenix.controls.JFXTextField?>
<?import java.net.URL?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" fx:id="rootAnchorS" prefHeight="393.0" prefWidth="600.0" styleClass="mainFxmlClass" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ulms.ui.addStudents.AddStudentsController">
<stylesheets>
<URL value="@addstudents.css" />
</stylesheets>
<children>
<VBox layoutX="255.0" prefHeight="399.0" prefWidth="345.0">
<children>
<JFXTextField fx:id="txtSID" alignment="CENTER_RIGHT" disable="true" editable="false" labelFloat="true" promptText="آی دی">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="20.0" />
</VBox.margin>
<font>
<Font size="13.0" />
</font>
</JFXTextField>
<JFXTextField fx:id="txtSName" alignment="CENTER_RIGHT" labelFloat="true" layoutX="10.0" layoutY="10.0" promptText="نام">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<font>
<Font size="13.0" />
</font>
</JFXTextField>
<JFXTextField fx:id="txtSFName" alignment="CENTER_RIGHT" labelFloat="true" layoutX="10.0" layoutY="35.0" promptText="نام پدر">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<font>
<Font size="13.0" />
</font>
</JFXTextField>
<JFXComboBox fx:id="cbxSFaculty" labelFloat="true" prefWidth="325.0" promptText="دانشکده">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</JFXComboBox>
<JFXComboBox fx:id="cbxSDep" labelFloat="true" layoutX="20.0" layoutY="226.0" prefWidth="325.0" promptText="بخش">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</JFXComboBox>
<JFXComboBox fx:id="cbxSYear" labelFloat="true" layoutX="20.0" layoutY="177.0" prefWidth="325.0" promptText="سال">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</JFXComboBox>
<JFXComboBox fx:id="cbxSSemister" labelFloat="true" layoutX="20.0" layoutY="222.0" prefWidth="325.0" promptText="سمستر">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</JFXComboBox>
<HBox prefHeight="66.0" prefWidth="345.0">
<children>
<JFXButton fx:id="btnCancelS" alignment="CENTER" cancelButton="true" contentDisplay="RIGHT" onAction="#cancelStudents" prefHeight="55.0" prefWidth="180.0" stylesheets="@addstudents.css" text="لغو کردن" textAlignment="CENTER">
<font>
<Font name="B Nazanin Bold" size="15.0" />
</font>
<HBox.margin>
<Insets top="10.0" />
</HBox.margin>
</JFXButton>
<JFXButton fx:id="btnSaveS" alignment="CENTER" contentDisplay="RIGHT" defaultButton="true" layoutX="10.0" layoutY="10.0" onAction="#addStudents" prefHeight="55.0" prefWidth="180.0" stylesheets="@addstudents.css" text="ذخیره کردن" textAlignment="CENTER">
<font>
<Font name="B Nazanin Bold" size="15.0" />
</font>
<HBox.margin>
<Insets top="10.0" />
</HBox.margin>
</JFXButton>
</children>
</HBox>
</children>
</VBox>
<ImageView fx:id="viewSImage" fitHeight="187.0" fitWidth="197.0" layoutX="25.0" layoutY="21.0" pickOnBounds="true" preserveRatio="true" />
<JFXButton fx:id="btnSImage" layoutX="58.0" layoutY="227.0" onAction="#openImageS" prefHeight="38.0" prefWidth="131.0" stylesheets="@addstudents.css" text="وارد کردن تصویر">
<font>
<Font name="B Nazanin Bold" size="14.0" />
</font>
</JFXButton>
</children>
</AnchorPane>