Функция переключения JavaFX CellFactory, возвращающая объектную ошибку с NULL, даже если она не должна быть NULL - PullRequest
0 голосов
/ 20 января 2019

В настоящее время я занимаюсь разработкой класса Log с именем NotesHistoryController, который содержит элементы типа NotepadHistory. NotepadHistory объекты содержат измененный объект Notepad, отметку времени и зарегистрированного пользователя, который изменил объект заметки.

Notepad s должны иметь приоритет, например, "хороший" или "плохой" и т. Д., И приоритет распознается по цвету, который отображается в ListView, то есть в cellFactory.

Способ создания NotepadHistory объектов выглядит следующим образом: пользователь изменяет текущий объект заметки, db обновляет старый объект, а затем я определяю / создаю объект NotepadHistory с его атрибутами + чужой ссылка на измененный Notepad объект:

Dao<Notepad, Integer> notepadDao = db.getNotepadDao();
Dao<NotepadHistory, Integer> notepadHistoryDao = db.getNotepadHistoryDao();
NotepadHistory notepadHistory = new NotepadHistory();

//Saving the Notepad which is to be edited to delete it from the listView in the main window
Notepad ersatz = this.notepad;
Timestamp timestamp = new Timestamp(System.currentTimeMillis());

//Saving the notepad after edits
this.notepad.setNotepadName(noteName);
this.notepad.setClassification(priority);
this.notepad.setNotepadContent(textContent);

try {
    notepadHistory.setNotepad(this.notepad);
    notepadHistory.setTimestamp(timestamp);
    notepadHistory.setUser(db.getLoggedInUser());
    notepadHistoryDao.create(notepadHistory);

    notepadDao.update(this.notepad);

Теперь есть кнопка, которая после нажатия должна показывать ListView с NotepadHistory объектами. Все это происходит в классе NotesHistoryController. Вот моя проблема: после нажатия на кнопку истории в приложении она дает мне NullPointerException в моем cellFactory. После отладки я обнаружил, что указанный объект блокнота текущего NotepadHistory объекта не содержит никаких списков, кроме идентификатора блокнота. После нескольких часов отладки и т. Д. Я до сих пор не знаю, в чем проблема. Это мой cellFactory:

notesHistoryListView.getItems().addAll(db.getNotepadHistoryDao().queryForAll());

notesHistoryListView.setCellFactory(new Callback<ListView<NotepadHistory>, ListCell<NotepadHistory>>() {
    public ListCell<NotepadHistory> call(ListView<NotepadHistory> param) {
        return new ListCell<NotepadHistory>() {
            @Override
            protected void updateItem(NotepadHistory item, boolean empty) {
                super.updateItem(item, empty);

                String style = "";
                if (!empty && item != null) {
                    setText(item.getNotepad().getNotepadName());

                    switch (item.getNotepad().getClassification()) {
                        case GOOD:
                            style = "-fx-background-color: green";
                            break;
                        case MEDIUM:
                            style = "-fx-background-color: yellow";
                            break;
                        case BAD:
                            style = "-fx-background-color: red";
                            break;
                        case NEUTRAL:
                            style = "-fx-background-color: grey";
                            break;
                    }
                } else {
                    setText("");
                }
                setStyle(style);
            }
        };
    }
});

Странно то, что это не дает мне исключения для строки setText(item.getNotepad().getNotepadName());. Это только для линии switch (item.getNotepad().getClassification()).

...