我当前正在开发一个名为NotesHistoryController
的Log类,其中包含NotepadHistory
类型的项目。 NotepadHistory
个对象包含已更改的Notepad
对象,一个时间戳记和更改了便笺对象的登录用户。
Notepad
必须具有优先级,例如“好”或“不良”等,并且优先级可以根据ListView
中显示的颜色(即{{1}中定义的颜色)来识别}。
我创建cellFactory
对象的方式是这样的:用户更改当前的便笺对象,db正在更新旧对象,然后我定义/创建一个NotepadHistory
对象及其属性+对更改后的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
对象的引用记事本对象除记事本ID之外没有任何列表。经过数小时的调试等,我仍然不知道问题出在哪里。这是我的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());
行。