Introspecção no projeto

Olá pessoal, gostaria de saber como faço para descobrir o nome do meu projeto e os pacotes e as classes do projeto. Estou tentando usar a classe package para os pacotes, mas ela retorna todos os pacotes do java junto com os pacotes do meu projeto, e a classe Class necessita do parametro para a busca da classe. Obrigado !!!

ahm? o.O
alguem ajuda o nosso amigo… q eu não entendi nada ;/

Ele tá falando de Reflection? Ou eu tbm não entendi nada?

É isso ai pessoal, eu quero atráves dos métodos de introspecção, usar algum método que retorne o nome do meu projeto, e os pacotes dele, e as classes dos pacote.
Eu tenho pesquisado na internet, mas os exemplos que falam a respeito de instrospecção, usam métodos que necessitam que se passe o nome da classe, ou pacote, para que se possa realizar uma reflexao sobre eles, e o que eu quero é descobrir quais são os pacotes e as classes existentes no meu projeto.
Quanto ao nome do projeto, eu nao achei nada na internet que me ajudasse. Eu quero tbem de alguma maneira obter o nome do meu projeto.
Quero fazer algo parecido com o Jtree do netBeans, na aba Projects, onde ele mostra a estrutura do meu projeto como um todo.

Obrigado pela atenção !!!

não tem como tu fazer isto …

o mais fácil que tu vai conseguir é se tu souber o nome do jar, abrir ele como um zip, e ir buscando tudo o que tem dentro dele …
da uma olhada nos fontes do SPring-Annotation tem uma classe de nome Scanner la que faz isto :smiley:

Beleza urubatan, ja consegui fazer o que eu queria, eu usei a classe zip mesmo pra abrir o jar. Agora eu nao to em casa, to no trabalho, mas depois eu posto o meu fonte só pra nao passar em branco pra galera que ler sobre o assunto.

Mas, nao era bem dessa maneira que eu queria fazer, pq para obter o nome do meu projeto, pacotes e classes eu tenho que gerar o .jar do projeto primeiro.
O que eu queria fazer, é assim, como o netbeans faz, ele identifica o diretório do projeto, e tudo o que tem dentro dele, então mostra na aba projects o projeto e seus respectivos pacotes, com suas classes… sem existir o .jar do projeto.
Será q tem alguma maneira de fazer isso sem ser abrindo o jar? sei lah, alguma API pra manipulação de diretórios?
Obrigado pela atenção !!!

Não vou colocar a classe inteira pra nao ocupar muito espaço

[color=red]O contrutor[/color]

public TelaPrincipal() {
        initComponents();
        definirModelosJList();
        implementarOuvidorJListPacotes();
        implementarOuvidorJListClasses();
    }

[color=red]Os métodos[/color]

private void definirModelosJList() {
        modeloJListPacotes = new DefaultListModel();
        jlPacotes.setModel(modeloJListPacotes);
        modeloJListClasses = new DefaultListModel();
        jlClasses.setModel(modeloJListClasses);
    }
    
    private void buscaClassesPacote(String pacote) {
        modeloJListClasses.clear();
        try {
            java.util.zip.ZipFile arquivoZip = new ZipFile(arquivo);
            java.util.Enumeration e = arquivoZip.entries();
            int z = 0;
            while( e.hasMoreElements() ) {
                ZipEntry entrada = (ZipEntry) e.nextElement();
                if (entrada.getName().indexOf(pacote + "/") != -1) {
                    z++;
                }
            }
            String pacotes[] = new String[z];
            int pos = 0;
            e = arquivoZip.entries();
            while( e.hasMoreElements() ) {
                ZipEntry entrada = (ZipEntry) e.nextElement();
                if (entrada.getName().indexOf(pacote + "/") != -1) {
                    pacotes[pos] = entrada.getName();
                    pos++;
                }
            }
            String classes[] = new String[pos];
            for (int i = 0; i < pacotes.length; i++) {
                classes = pacotes[i].split("/");
                for (int y = 0; y < classes.length; y++) {
                    if (classes[y].indexOf(".class") != -1) {
                        modeloJListClasses.addElement(classes[y]);
                    }
                }
            }
            arquivoZip.close();
        } catch (ZipException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    private void implementarOuvidorJListPacotes() {
        jlPacotes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        ListSelectionModel selLinha = jlPacotes.getSelectionModel();
        selLinha.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) return;
                
                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                
                if (lsm.isSelectionEmpty()) {
                    //no rows are selected
                } else {
                    int selectedRow = lsm.getMinSelectionIndex();
                    //selectedRow is selected
                   String pacote = String.valueOf(jlPacotes.getSelectedValue());
                    buscaClassesPacote(pacote);
                }
            }
        });
    }
    
    private void implementarOuvidorJListClasses() {
        jlClasses.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        ListSelectionModel selLinha = jlClasses.getSelectionModel();
        selLinha.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) return;
                
                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                
                if (lsm.isSelectionEmpty()) {
                    //no rows are selected
                } else {
                    int selectedRow = lsm.getMinSelectionIndex();
                    //selectedRow is selected
                    System.out.println("classes");
                }
            }
        });
    }

[color=red]Váriaveis globais declaradas[/color]

Class classes[];
    
DefaultListModel modeloJListPacotes, modeloJListClasses;
    
File arquivo;

Qualquer dúvida sobre o código é só perguntar…
Mais uma vez obrigado pela ajuda !!! t+