问题的简要说明.
假设我们有JTable并且用户以某种方式与它进行交互.该表的TableModel不断变化.如何确保当用户尝试通过引用一些常量列和当前选定的行(通过它从JTable得到的rowIndex)从表中获取一些信息时,他将不会遇到更改TableModel并且从JTable获取的rowIndex的情况不再对应于TableModel中的相同值.
以下是最初的问题,它更详细地解释了问题:
考虑以下情况:
> JTable显示某些系统中当前正在运行的请求的用户信息
>当新请求进入系统时,新行将添加到表中
>用户可以通过右键单击行(表中使用单行选择模型)并从菜单中选择选项(如:中止,推迟,重试等)与表进行交互
>有单独的类实现ActionListener接口(监听表)并处理所有用户交互
>当用户对表执行某些操作时,此类检查当前选定的行并为用户的操作分配一些值(基本上它需要选定行的索引,然后调用tableModel.getValueAt(indexOfSelectedRow,someValuableDataColumnIndex))
现在考虑系统处于压力测试并且频繁地提交请求的情况.在我的情况下,这导致了一个错误,当有时处理用户操作的类从表模型中获取错误信息时(在一行上调用操作,但是对另一行执行操作,通常是下一行).我相信这种情况发生是因为在动作处理过程中,由于接受了新请求,因此表类模型会发生变化.
问题是,如何解决这个问题.我正在考虑两种方法:
>使用类似invokeAndWait()的东西在我的用户操作处理类中初始化(不喜欢这个想法,因为它会导致其他不可预测的错误)
>创建单独的侦听器类,该类将监听表中的用户选择,并在与TableModel分开选择时立即存储来自所选行的数据.这样,动作处理类将不是从正在改变的表模型中获取数据,而是从所选行中获取数据,该行在所描述的场景期间是恒定的. (不确