首页 > 解决方案 > 异常未处理

问题描述

当我打开视图窗口时,我输入了 FacultyCode 的值,如果我输入一个现有的值,那么一切都很好,如果我输入一个不存在的值,那么窗口就会冻结并且什么也没有发生

客户

@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);

        });
    }

服务器

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();
      }
}

如果发生异常,我尝试关闭窗口,如果输入 = null,我也尝试关闭窗口,但没有帮助

标签: javasqljavafx

解决方案


服务器

    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();
    }

客户

@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");
            }
        });
    }

所以我首先赋值 output = error ,如果请求没有返回任何东西,那么我将它发送给客户端,如果请求有东西来,我分配值并将它发送给客户端。接下来,我在客户端处理数据


推荐阅读