我在这个问题上陷于困境,而且对如何进行一无所知。

我在MVC方案中设置了JavaFX应用程序。我有模型GameAchievement以及它们各自的ControllerView类,GameControllerAchievementControllerGameViewAchievementView。对于DAOGame我也都有​​一个Achievement

现在在refreshData()中的函数AchievementController中,抛出以下错误跟踪:

https://pastebin.com/4TWZ6kjw

我不明白为什么会这样。

步骤说明:

打开游戏并将场景从GameView切换到AchievementView时,我在`

refreshData()

并且功能正常。然后,通过

AchievementController.onSwitchView()

方法,它引发由AchievementController.handleAddButton()中的the line触发的上面的跟踪,其中说

refreshData()

我不明白为什么会这样。我检查了调试器,并且view.getGamePicker().setItems(gameList)viewview.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.unmodifiableListnew ArrayList<>(objects)替换它确实有效...

08-18 11:46