用reflect应该可以.我实验一下

解决方案 »

  1.   

    不是目录遍历,我是要找到在 classpath 中的包下面的所有类..classpath下面的包我可以用 Package.getPackages();取得.
      

  2.   

    use ZipFile to get ZipEntry of each class.
    then use reflection
    Maybe there're some better ways
      

  3.   

    下面就是一个找包中Class的,你看看package studytest;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */
    import java.awt.*;
    import java.awt.event.*;
    import java.lang.reflect.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;public class ClassTree {
      public static void main(String[] args) {
        JFrame frame=new ClassTreeFrame();
        frame.show();
      }}class ClassTreeFrame extends JFrame implements ActionListener
    {
      private DefaultMutableTreeNode root;
      private DefaultTreeModel model;
      private JTree tree;
      private JTextField textField;  public ClassTreeFrame()
      {
        setTitle("Class Tree");
        setSize(300,200);
        addWindowListener(new WindowAdapter()
        {
          public void windowClosing(WindowEvent e)
          {
            System.exit(0);
          }
        });    root=new DefaultMutableTreeNode(java.lang.Object.class);
        model=new DefaultTreeModel(root);
        tree=new JTree(model);    addClass(getClass());    ClassNameTreeCellRenderer renderer=new ClassNameTreeCellRenderer();    renderer.setClosedIcon(new ImageIcon("C:\\1.gif"));
        renderer.setOpenIcon(new ImageIcon("C:\\3.gif"));
        renderer.setLeafIcon(new ImageIcon("C:\\2.gif"));
        tree.setCellRenderer(renderer);    Container contentPane=getContentPane();
        contentPane.add(new JScrollPane(tree),"Center");    textField=new JTextField();
        textField.addActionListener(this);
        contentPane.add(textField,"South");
      }  public void actionPerformed(ActionEvent event)
      {
        try
        {
          String text=textField.getText();
          addClass(Class.forName(text));
          textField.setText("");
        }
        catch(ClassNotFoundException e)
        {
          Toolkit.getDefaultToolkit().beep();
        }
      }  public DefaultMutableTreeNode findUserObject(Object obj)
      {
        Enumeration e=root.breadthFirstEnumeration();
        while(e.hasMoreElements())
        {
          DefaultMutableTreeNode node=(DefaultMutableTreeNode)e.nextElement();
          if(node.getUserObject().equals(obj))
            return node;    }
         return null;
      }  public DefaultMutableTreeNode addClass(Class c)
      {
        if(c.isInterface()||c.isPrimitive()) return null;    DefaultMutableTreeNode node=findUserObject(c);
        if(node!=null) return node;    Class s=c.getSuperclass();    DefaultMutableTreeNode parent;
        if(s==null)
          parent=root;
        else
          parent=addClass(s);    DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(c);
        model.insertNodeInto(newNode,parent,parent.getChildCount());    TreePath path=new TreePath(model.getPathToRoot(newNode));
        tree.makeVisible(path);    return newNode;
      }}class ClassNameTreeCellRenderer extends DefaultTreeCellRenderer
    {
      private Font plainFont=null;
      private Font italicFont=null;  public Component getTreeCellRendererComponent(JTree tree,Object value,boolean selected,boolean expanded,boolean leaf,int row,boolean hasFocus)
      {
        super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
        DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
        Class c=(Class)node.getUserObject();    if(plainFont==null)
        {
          plainFont=getFont();      if(plainFont!=null)
            italicFont=plainFont.deriveFont(Font.ITALIC);
        }
        if((c.getModifiers()&Modifier.ABSTRACT)==0)
          setFont(plainFont);
        else
          setFont(italicFont);    return this;
      }
    }
      

  4.   

    Thanks. CoolAbu(绿茶的白开水(★★★★))