В настоящее время я занимаюсь разработкой класса 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())
.