Java JTree代码不';行不通
我对java知之甚少,我花了很多天的时间试图找出我做错了什么。我有一个名为FileManagerFrame的JFrame表单和一个内部带有JTree的Bean表单。在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
/*
* 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。您应该避免使用空值。