### Question:
EventTreeModel implements TreeModel, ListEventListener<E> { public void dispose() { swingThreadSource.removeListEventListener(this); if(disposeSwingThreadSource) { swingThreadSource.dispose(); } swingThreadSource = null; } EventTreeModel(TreeList<E> source); @Override Object getRoot(); @Override Object getChild(Object parent, int index); @Override int getChildCount(Object parent); @Override boolean isLeaf(Object node); @Override void valueForPathChanged(TreePath path, Object newValue); @Override int getIndexOfChild(Object parent, Object child); @Override void addTreeModelListener(TreeModelListener listener); @Override void removeTreeModelListener(TreeModelListener listener); @Override void listChanged(ListEvent<E> listChanges); void dispose();  }### Answer:
@Test public void testDispose() { EventList<String> treeNodeList = new BasicEventList<>(); TreeList<String> glazedTreeList = new TreeList<>(treeNodeList, TreeListTest.COMPRESSED_CHARACTER_TREE_FORMAT, TreeList.<String>nodesStartCollapsed()); EventTreeModel<String> eventTreeModel = new EventTreeModel<>(glazedTreeList); eventTreeModel.dispose(); glazedTreeList.dispose(); }