我有一个Swing应用程序(驻留在一个可执行的有签名的JAR中),它是一个客户机。该应用程序还连接到服务器。当满足某些条件时,我会刷新GUI(更具体地说,删除
JTree
然后重新填充)。当我按原样运行这个客户机(即,没有安全管理器,也没有驻留在可执行的签名JAR中)时,树会刷新和更新,而不会出现任何问题。
但是,当我将客户机打包为已签名的JAR(使用适当的策略文件)时,我会遇到刷新问题。当应用程序启动时,我
树形结构
未展开。当我单击它一次时,它看起来已经展开,但是子节点没有显示。之后我必须单击它两次才能显示节点。另外,当我执行刷新(删除所有节点,然后重新填充)时,UI没有适当地刷新。我(再次)必须单击根节点两次以刷新GUI。
private void buildTree() throws IOException, ClassNotFoundException {
setVisible(false);
tree.removeTreeWillExpandListener(this);
tree.removeTreeSelectionListener(this);
DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) treeModel.getRoot();
root.removeAllChildren();
root.setUserObject(base);
Book[] bookArray = remoteLibraryService.getAllBooks();
TreeBuilderService.buildTree(root, bookArray);
treeModel.reload();
for(int i = 0; i < tree.getRowCount(); i++) {
tree.expandRow(i);
}
tree.addTreeSelectionListener(this);
tree.addTreeWillExpandListener(this);
setVisible(true);
}
categoryNode = new DefaultMutableTreeNode(book.getGenre());
root.add(categoryNode);