我在这个问题上陷于困境,而且对如何进行一无所知。
我在MVC方案中设置了JavaFX应用程序。我有模型Game
和Achievement
以及它们各自的Controller
和View
类,GameController
,AchievementController
,GameView
,AchievementView
。对于DAO
和Game
我也都有一个Achievement
。
现在在refreshData()
中的函数AchievementController
中,抛出以下错误跟踪:
https://pastebin.com/4TWZ6kjw
我不明白为什么会这样。
步骤说明:
打开游戏并将场景从GameView
切换到AchievementView
时,我在`refreshData()
并且功能正常。然后,通过AchievementController.onSwitchView()
方法,它引发由AchievementController.handleAddButton()
中的the line触发的上面的跟踪,其中说refreshData()
。
我不明白为什么会这样。我检查了调试器,并且view.getGamePicker().setItems(gameList)
,view
和view.getGamePicker()
都不为空。 gameList
是一个包含应包含的确切对象的列表,这些对象也不为null。
我知道这实际上并不是一个最低限度的可重现示例,但我真的不知道如何确定您实际需要的行。我完全陷入了困境!如果您需要整个项目,以便可以在本地运行,请在此处检查:https://github.com/kemmel-dev/TestRepo
链接到(我认为)相关的类:
MainApplication
DAO
AchievementDAO
GameDAO
AchievementController
GameController
通过在启动后在第一个屏幕中添加一个或多个游戏,然后打开刚添加的游戏,然后尝试向该游戏添加成就,可以重现此行为。
最佳答案
我仍然不确定为什么,但是在我的List.copyOf()
中使用DAO
导致了此问题。显然,setItems()
的ComboBox
方法或FXCollections.ObservableList()
方法在接收List.copyOf()
作为参数时不能很好地发挥作用。
用Collections.unmodifiableList
或new ArrayList<>(objects)
替换它确实有效...