简体   繁体   中英

Exception is not handled

When I open the view window, I enter the value of facultyCode and if I enter an existing value, then everything is fine, and if I enter a non-existent value, then the window freezes and nothing happens

CLIENT

@FXML
    void initialize() {
        showButton.setOnAction(actionEvent -> {
            String input = null;
            try {
                socket = new Socket("127.0.0.1",3024);
                outputStream = new DataOutputStream(socket.getOutputStream());
                inputStream = new DataInputStream(socket.getInputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            String facultyCode = facultyCodeArea.getText();
            String output = "SELECT * FROM Faculty WHERE facultyCode = " + facultyCode + ";";
            try {
                outputStream.writeUTF(output);
                outputStream.flush();
                input = inputStream.readUTF(); //if the input is incorrect, input is not assigned to 
                                               //anything
            } catch (IOException e) {
                e.printStackTrace();
            }
                String[] dataServer = input.split(" ");
                String name = dataServer[0];
                nameArea.setText(name);
                String code = dataServer[1];
                facultyCodeArea.setText(code);
                String number = dataServer[2];
                numberSubjectsArea.setText(number);
                String main = dataServer[3];
                mainSubjectArea.setText(main);
                String dean = dataServer[4];
                deanArea.setText(dean);
                String language = dataServer[5];
                languageStudyArea.setText(language);

        });
    }

SERVER

else if (isSelectQuery(input)) {
    statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery(input);
    while (resultSet.next()) {
        String name = resultSet.getString("name");
        int codeFaculty = resultSet.getInt("facultyCode");
        int numberSubject = resultSet.getInt("numberSubjects");
        String mainSubject = resultSet.getString("mainSubject");
        String dean = resultSet.getString("dean");
        String languageStudy = resultSet.getString("languageStudy");
        String output = name + " " +
            codeFaculty + " " +
            numberSubject + " " +
            mainSubject + " " +
            dean + " " +
            languageStudy;
            outputStream.writeUTF(output);
            outputStream.flush();
      }
}

I've tried closing the window if an exception occurs, I've also tried closing the window if input = null, but didn't help

SERVER

    String output = "error";
    else if (isSelectQuery(input)) {
        statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(input);
        while (resultSet.next()) {
            String name = resultSet.getString("name");
            int codeFaculty = resultSet.getInt("facultyCode");
            int numberSubject = resultSet.getInt("numberSubjects");
            String mainSubject = resultSet.getString("mainSubject");
            String dean = resultSet.getString("dean");
            String languageStudy = resultSet.getString("languageStudy");
            output = name + " " +
            codeFaculty + " " +
            numberSubject + " " +
            mainSubject + " " +
            dean + " " +
            languageStudy;
            }
        outputStream.writeUTF(output);
        outputStream.flush();
    }

CLIENT

@FXML
    void initialize() {
        showButton.setOnAction(actionEvent -> {
            String input = null;
            try {
                socket = new Socket("127.0.0.1",3024);
                outputStream = new DataOutputStream(socket.getOutputStream());
                inputStream = new DataInputStream(socket.getInputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            String facultyCode = facultyCodeArea.getText();
            String output = "SELECT * FROM Faculty WHERE facultyCode = " + facultyCode + ";";
            try {
                outputStream.writeUTF(output);
                outputStream.flush();
                input = inputStream.readUTF();
            } catch (IOException e) {
                e.printStackTrace();
            }
            String[] dataServer = input.split(" ");
            if(!dataServer[0].equals("error")) {
                String name = dataServer[0];
                nameArea.setText(name);
                String code = dataServer[1];
                facultyCodeArea.setText(code);
                String number = dataServer[2];
                numberSubjectsArea.setText(number);
                String main = dataServer[3];
                mainSubjectArea.setText(main);
                String dean = dataServer[4];
                deanArea.setText(dean);
                String language = dataServer[5];
                languageStudyArea.setText(language);
            }
            else {
                errorArea.setText("Not exist");
            }
        });
    }

So I first assign output = error and if the request does not return anything, then I send it to the client, if on request something came, I assign values and send it to the client. Next, I process the data on the client

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM