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
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+