Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTree正在显示应可扩展为叶节点的节点_Java_Jtree_Treemodel_Treepath - Fatal编程技术网

Java JTree正在显示应可扩展为叶节点的节点

Java JTree正在显示应可扩展为叶节点的节点,java,jtree,treemodel,treepath,Java,Jtree,Treemodel,Treepath,我有一个项目,其中我的程序从操作系统磁盘映像中获取文件并将其详细信息存储在数据库中,另一个功能从数据库中获取文件并将其存储在列表中(我自己的对象类型),并在获取路径(也存储在数据库中)后创建JTree以及基于斜杠拆分路径字符串,以便各个文件夹中的文件是叶节点,文件夹是父节点。文件的获取工作非常完美,但我认为创建JTree有问题,因为有些文件夹在JTree中显示为叶节点。以下是一个屏幕截图: 让我告诉您我的代码是什么样子的: public class ActiveCase { privat

我有一个项目,其中我的程序从操作系统磁盘映像中获取文件并将其详细信息存储在数据库中,另一个功能从数据库中获取文件并将其存储在列表中(我自己的对象类型),并在获取路径(也存储在数据库中)后创建JTree以及基于斜杠拆分路径字符串,以便各个文件夹中的文件是叶节点,文件夹是父节点。文件的获取工作非常完美,但我认为创建JTree有问题,因为有些文件夹在JTree中显示为叶节点。以下是一个屏幕截图:

让我告诉您我的代码是什么样子的:

public class ActiveCase {   
private void populateList(){
    //a function that fetches a list of files from a database and stores it in a list
 List<AbstractFile> l = *a query function that stores the files in the list*;
listFiles(l);
}

public void listFiles(List<AbstractFile> fl){    
    ArrayList<TreePath> te = new ArrayList<TreePath>();
    try {           
        for(AbstractFile file : fl){
        //don't worry about the isDir() and getName() functions they work                               
        if(!file.isDir() && !file.getName().startsWith(".")){                                        
        te.add(new TreePath(("File list"+formatPath(file.getUniquePath())).split("/")));
        }
    }
    } catch (TskCoreException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   

        TreeModel tmClean = new TreePathsTreeModel("File list", te);
        cleanPanel.add(new JTree(tmClean));
}

private static String formatPath(String uniquePath){
    String[] pathSegments = uniquePath.split("/");
    int index = 3;
    StringBuilder strbuf = new StringBuilder();
    for (; index < pathSegments.length; ++index) {
        if (!pathSegments[index].isEmpty()) {
            strbuf.append("/").append(pathSegments[index]);
        }
    }   
    return strbuf.toString();
}        

也许我的鼻子底下有什么东西不见了。这可能是一个愚蠢的错误。有什么想法吗?这是我大学最后一年的项目,请帮忙

该错误最有可能出现在
树模型的
isLeaf(对象节点)
方法中
请看以下的javadoc:

如果
节点
是叶,则返回
true
。此方法可能返回
false
即使
节点
没有子节点。例如,文件系统中的目录, 可能不包含任何文件;表示目录的节点不是叶, 但它也没有孩子


因此,对于目录(即使是空的目录),您需要返回
false
,而不是
true

谢谢!我所要做的就是在isLeaf()中添加另一个条件来检查空文件夹,它成功了!谢谢!!!!
    public class TreePathsTreeModel implements TreeModel {
      private final ArrayList<TreePath> paths;
      private final String root;

      public TreePathsTreeModel(String root, ArrayList<TreePath> te) {
        this.root = root;
        this.paths = te;
        //a little test print statement to see if the TreePath list is in the right format
        for(TreePath t : paths){
            System.out.println(t.toString());
        }
      }
      @Override
      public Object getRoot() {
        return this.root;
      }

      @Override
      public Object getChild(Object parent, int index) {
        try {
          return getChildren(parent).get(index);
        } catch (IndexOutOfBoundsException ex) {
          return null;
        }
      }

      @Override
      public int getChildCount(Object parent) {
        return getChildren(parent).size();
      }

      @Override
      public boolean isLeaf(Object node) {
        for (int i = 0; i < paths.size(); i++) {
          TreePath treePath = paths.get(i);
          if (treePath.getLastPathComponent().equals(node))
            return true;
        }
        return false;
      }

      // This method is only required for editable trees, so it is not
      // implemented here.
      @Override
      public void valueForPathChanged(TreePath path, Object newValue) {
        //throw new UnsupportedOperationException("Not supported yet.");
      }

      @Override
      public int getIndexOfChild(Object parent, Object child) {
        return getChildren(parent).indexOf(child);
      }

      // This TreeModel never fires any events (since it is not editable)
      // so event listener registration methods are left unimplemented
      @Override
      public void addTreeModelListener(TreeModelListener l) {
        //throw new UnsupportedOperationException("Not supported yet.");
      }

      @Override
      public void removeTreeModelListener(TreeModelListener l) {
        //throw new UnsupportedOperationException("Not supported yet.");
      }
              //search all paths in list for given object 
              //return every item one level further than it
      private ArrayList<String> getChildren(Object parent) {
        ArrayList<String> children = new ArrayList<String>();
        for (int i = 0; i < this.paths.size(); i++) {
          ArrayList<Object> pathObjects = new ArrayList<Object>( Arrays.asList(this.paths.get(i).getPath()) );
          for (Iterator<Object> it = pathObjects.iterator(); it.hasNext();) {
            Object parentCandidate = it.next();
            if (parentCandidate.equals(parent)) {
              Iterator<Object> checker = it;
              try {
                String child = new DefaultMutableTreeNode( checker.next() ).toString();
                if ( !children.contains(child) )
                  children.add (child);
              } catch (NoSuchElementException ex) {

              } 
            }
          }
        }
        return children;
      }

    }
...
[File list, dev, tty0]
[File list, dev, tty1]
[File list, dev, tty2]
[File list, dev, tty3]
[File list, dev, tty4]
[File list, dev, tty5]
[File list, dev, tty6]
[File list, dev, tty7]
[File list, dev, tty8]
[File list, dev, tty9]
[File list, dev, urandom]
[File list, dev, zero]
[File list, home, mainvm, examples.desktop]
[File list, home, mainvm, .cache, wallpaper, 0_5_1920_950_792beab7550410d531e55f95b449f135]
[File list, home, mainvm, .cache, upstart, unity7.log.2.gz]
[File list, home, mainvm, .cache, upstart, ssh-agent.log.2.gz]
[File list, home, mainvm, .cache, upstart, gnome-keyring-ssh.log.1.gz]
[File list, home, mainvm, .cache, upstart, dbus.log]
[File list, home, mainvm, .cache, upstart, unity7.log]
[File list, home, mainvm, .cache, upstart, hud.log]
[File list, home, mainvm, .cache, upstart, upstart-event-bridge.log.2.gz]
[File list, home, mainvm, .cache, upstart, unity7.log.1.gz]
[File list, home, mainvm, .cache, upstart, unity-settings-daemon.log.2.gz]
[File list, home, mainvm, .cache, upstart, unity-panel-service.log.2.gz]
[File list, home, mainvm, .cache, upstart, hud.log.1.gz]
[File list, home, mainvm, .cache, upstart, window-stack-bridge.log.2.gz]
[File list, home, mainvm, .cache, upstart, gpg-agent.log.2.gz]
[File list, home, mainvm, .cache, upstart, ssh-agent.log.1.gz]
[File list, home, mainvm, .cache, upstart, window-stack-bridge.log.1.gz]
[File list, home, mainvm, .cache, upstart, unity-panel-service.log]
[File list, home, mainvm, .cache, upstart, unity-settings-daemon.log.1.gz]
[File list, home, mainvm, .cache, upstart, unity-panel-service.log.1.gz]
[File list, home, mainvm, .cache, upstart, dbus.log.2.gz]
[File list, home, mainvm, .cache, upstart, dbus.log.1.gz]
[File list, home, mainvm, .cache, upstart, gnome-keyring-ssh.log.2.gz]
[File list, home, mainvm, .cache, upstart, gpg-agent.log.1.gz]
[File list, home, mainvm, .cache, upstart, indicator-sound.log.2.gz]
[File list, home, mainvm, .cache, upstart, indicator-sound.log.1.gz]
[File list, home, mainvm, .cache, upstart, upstart-event-bridge.log.1.gz]
[File list, home, mainvm, .cache, ibus, bus, registry.F0VAPY]
...
[File list, home, mainvm, .local, share, recently-used.xbel.49E0TY]
[File list, home, mainvm, .local, share, recently-used.xbel]
[File list, home, mainvm, .gnupg, gnupg_spawn_agent_sentinel.lock]
[File list, home, mainvm, .gnupg, S.gpg-agent]
[File list, lib, apparmor, functions]
[File list, lib, apparmor, profile-load]
[File list, lib, brltty, brltty.sh]
[File list, lib, brltty, libbrlttybal.so]
[File list, lib, brltty, libbrlttybat.so]
[File list, lib, brltty, libbrlttybba.so]
[File list, lib, brltty, libbrlttybbc.so]
[File list, lib, brltty, libbrlttybbd.so]
[File list, lib, brltty, libbrlttybbg.so]
[File list, lib, brltty, libbrlttybbl.so]
[File list, lib, brltty, libbrlttybbm.so]
[File list, lib, brltty, libbrlttybbn.so]
[File list, lib, brltty, libbrlttybcb.so]
[File list, lib, brltty, libbrlttybce.so]
[File list, lib, brltty, libbrlttybec.so]
[File list, lib, brltty, libbrlttybeu.so]
...