1

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>
Stefan Zobel
  • 3,182
  • 7
  • 28
  • 38
Zalmai
  • 11
  • 2

0 Answers0