【发布时间】:2016-01-16 20:28:11
【问题描述】:
我在JTree 组件中拖放时遇到了一些困难。我的拖放是允许用户重新排列树中的节点。我的实现工作正常,但在某些情况下,在其子节点之间移动节点时会出现空指针异常,如下图所示,我将 C 拖到 B 下(在 B 和 A 之间):
该异常的直接原因似乎是在执行 DnD 框架的清理时,被拖动项目的路径因我在树上执行的更改而无效以实现所需的移动。
更具体地说,我得到一个这样的调用堆栈:
javax.swing.plaf.basic.BasicTreeUI#getDropLineRect
java.beans.PropertyChangeSupport#firePropertyChange
...
javax.swing.TransferHandler.DropHandler#cleanup
...
javax.swing.TransferHandler.SwingDropTarget#drop
getDropLineRect 显然是在尝试为树中不再存在的路径评估一个矩形,因为在我的 importData 函数中执行移动时该节点已被删除。
我的问题是:这是预期的吗?在 DnD 尚未完成时执行数据更改是否被认为是不安全的,是否应该排队并稍后执行?我在任何文档中都没有看到任何此类要求,并且在任何示例或教程中都没有看到此类异步实现。
【问题讨论】:
标签: java swing drag-and-drop jtree