Java JTree代码不';行不通

Java JTree代码不';行不通,java,swing,jtree,Java,Swing,Jtree,我对java知之甚少,我花了很多天的时间试图找出我做错了什么。我有一个名为FileManagerFrame的JFrame表单和一个内部带有JTree的Bean表单。在JTree中,我有以下代码: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open th

我对java知之甚少,我花了很多天的时间试图找出我做错了什么。我有一个名为FileManagerFrame的JFrame表单和一个内部带有JTree的Bean表单。在JTree中,我有以下代码:

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package FileManager;

import java.io.File;
import java.util.Collections;
import java.util.Vector;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * 
 */
public class FilesTree extends JTree 
{
private File dir;

/**
 * Creates new form FilesTree
 */
public FilesTree() 
{
    initComponents();
    //FilesTree tree = new FilesTree();
    File fList[] = File.listRoots();
      for(int i = 0; i  < fList.length; i++)
      {
          dir = fList[i];
          addNodes(null, dir);
      }


    // Add a listener
    addTreeSelectionListener(new TreeSelectionListener() 
    {
        public void valueChanged(TreeSelectionEvent e) 
        {
            DefaultMutableTreeNode node =(DefaultMutableTreeNode)e.getPath().getLastPathComponent();
            System.out.println("You selected " + node);
        }
    });
}

/** Add nodes from under "dir" into curTop. Highly recursive. */
DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir) 
{
   // String curPath = dir.getPath();
    DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(dir);
    if (curTop != null) 
    { // should only be null at root
        curTop.add(curDir);
    }
    Vector ol = new Vector();
    String[] tmp = dir.list();
    for (int i = 0; i < tmp.length; i++)
    {
        ol.addElement(tmp[i]);
    }
    Collections.sort(ol, String.CASE_INSENSITIVE_ORDER);
    File f;
    Vector files = new Vector();
    // Make two passes, one for Dirs and one for Files. This is #1.
    for (int i = 0; i < ol.size(); i++) 
    {
        String thisObject = (String) ol.elementAt(i);
        String newPath;
        if  (".".equals(dir.getName()))
        {
            newPath = thisObject;
        }
        else
        {
            newPath = dir + File.separator + thisObject;
        }
        if ((f = new File(newPath)).isDirectory())
        {
            addNodes(curDir, f);
        }
        else
        {
            files.addElement(thisObject);
        }
    }
    // Pass two: for files.
    for (int fnum = 0; fnum < files.size(); fnum++)
    {
        curDir.add(new DefaultMutableTreeNode(files.elementAt(fnum)));
    }
    return curDir;
}

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
    }// </editor-fold>                        


    // Variables declaration - do not modify                     
    // End of variables declaration                   
}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包文件管理器;
导入java.io.File;
导入java.util.Collections;
导入java.util.Vector;
导入javax.swing.JTree;
导入javax.swing.event.TreeSelectionEvent;
导入javax.swing.event.TreeSelectionListener;
导入javax.swing.tree.DefaultMutableTreeNode;
/**
*
* 
*/
公共类FilesTree扩展了JTree
{
私有文件目录;
/**
*创建新的表单文件树
*/
公共文件树()
{
初始化组件();
//FilesTree=newfilestree();
File fList[]=File.listRoots();
for(int i=0;i
它假设在JTree中显示所有系统根文件。有人能告诉我为什么它不起作用,并建议我能做些什么吗


这里是堆栈跟踪:

我认为您应该阅读更多关于Java和OOP的内容。由于无休止的递归,您的代码片段将引发堆栈溢出

public FilesTree() 
{
    initComponents();
    FilesTree tree = new FilesTree();

首先,您应该删除变量树的最后一行和所有出现的内容。如果您的代码仍然不工作,请提供更多信息(例如堆栈跟踪),如果您想得到答案。

到底什么不工作?它是否给出任何异常?@Sanjeev当我运行程序时,它给我这样的信息:“当我运行程序时,它给我这样的信息:prntscr.com/3n3csm”“错误-无法检索请求的URL”你应该这样做的原因之一。为了更快地获得更好的帮助,请发布一个(最简单的完整且可验证的示例)。顺便说一句,为什么这个代码要扩展JTree?在我10多年的Java GUI编程中,我已经使用了数百次树,我需要扩展它的次数是..0。鉴于这似乎是在处理文件,您可以从的代码开始。我按照您所说的做了,并发布了堆栈跟踪。请更新您的代码。在第62行,您无法获得NPE。语句dir.equals(“.”)将始终返回false。更好的是:“...equals(dir.getName())是我做的。非常抱歉,我删除了一些注释,这就是为什么行和堆栈跟踪不正确的原因。我是java新手,为这些愚蠢的错误感到抱歉。我真的需要让代码正常工作,这样你的帮助才有价值。非常感谢您的时间。如果不是目录,dir.list()可能会返回null。您应该避免使用空值。