Почему я получаю ноль здесь? - PullRequest
0 голосов
/ 18 октября 2019

В моем приложении javafx есть следующие методы:

@FXML
    private void addNewWorkerButton(ActionEvent event) {
        String name = newWorkerNameTextField.getText();
        int wage = Integer.parseInt(newWorkerWageTextField.getText());
        allWorks.add(new Work(new Worker(getNextId(), name, wage)));
        new FileHandling().writeDataToFileAsJSON(allWorks); //I save the data in JSON
        setNamesChoiceBoxes();
        }
    }

private void setNamesChoiceBoxes() {
        ArrayList<String> names = new ArrayList<>();
        ArrayList<Worker> workers = new FileHandling().getWorkersDataFromJSONFile(); //I read all Workers objects from JSON

        for (Worker i : workers) {
            String tmp = i.getName() + " (" + i.getId() + ")";
            names.add(tmp);
        }

        ArrayList<String> searchNames = new ArrayList<>(names);
        searchNames.add(0, "All");
        ObservableList<String> search = FXCollections.observableList(searchNames);
        searchNameChoiceBox.setItems(search);
        searchNameChoiceBox.getSelectionModel().selectFirst();
    }
private void search() {
        int workerID = 0;                   
        String idString = "" + searchNameChoiceBox.getSelectionModel().getSelectedItem();
        System.out.println("Search: " + searchNameChoiceBox.getSelectionModel().getSelectedItem());
        if (!idString.equals("All")) {
                workerID = Integer.parseInt(idString.substring(idString.indexOf("(") + 1, idString.indexOf(")")));
        }

    }

@Override
    public void initialize(URL url, ResourceBundle rb) {
searchNameChoiceBox.setOnAction((event) -> {
            search();
        });
}

У меня есть поле выбора, содержащее всех рабочих, которые есть в моем файле JSON (searchNameChoiceBox). Когда я добавляю нового работника, я вызываю метод setNamesChoiceBoxes (), который считывает всех работников из файла JSON и обновляет поле выбора. "SetOnAction" вызовет метод search (), который получает здесь значение NULL:

System.out.println("Search: " + searchNameChoiceBox.getSelectionModel().getSelectedItem());

Каким-то образом в этой строке получается значение "NULL", что не должно быть возможным, поскольку в методе setNamesChoiceBoxes () я выбираюпервый вариант ("searchNameChoiceBox.getSelectionModel (). selectFirst ();")

Поиск: Все // Я запустил приложение

Поиск: ноль // Я добавил нового работника

Исключение в потоке "Поток приложения JavaFX" java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: -1 в java.lang.String.substring (неизвестный источник) в controller.Control.search (Control.java): 335) at controller.Control.lambda $ 4 (Control.java:440) в ...

Control.java:335 - это строка:

workerID = Integer.parseInt(idString.substring(idString.indexOf("(") + 1, idString.indexOf(")")));

Control.java:440 - это вызов search () в методе initialize ().

Я не получаю нулевое значение, когда работаю с любым массивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...