Class.forName() - Help

5 respostas
iVinny

Galera,

Sou novo aqui no forum e desde já agradeço a ajuda de tudo que já achei aqui para resolver meus problemas, mas este não encontrei, caso já existe um tópico parecido não o encontrei.

Estou com o seguinte problema. Criei uma classe para ler os atributos java dentro de outra classe com Reflection (Botões, combos, etc) até ai normal. Fiz testes com a propria classe que estava em execução e funcionou normalmente, mas não sei se estou fazendo errado, quando tento recuperar os atributos de uma classe que não esteja no mesmo pacote da um erro de classe não encontrada, mesmo eu passando o caminho do pacote onde se encontra a classe.

Código

private void carregaAtributo(String nomeClasse) {
        try {
            //Class cls = Class.forName(nomeClasse);
            Class cls = Class.forName(nomeClasse, true, getClass().getClassLoader());
            
            Field fieldlist[] = cls.getDeclaredFields();

            for (int i = 0; i < fieldlist.length; i++) {
                Field fld = fieldlist[i];
                String campo[] = new String[fieldlist.length];

                campo[i] = fld.getType().toString();

                if (campo[i].equals("class javax.swing.JButton") ||
                        campo[i].equals("class javax.swing.JComboBox")) {
                    cbAtributo.addItem(fld.getName());

                }

            }
        } catch (Throwable e) {
            System.err.println(e);
        }

    }
//carregaAtributo("NavAuto.Navauto");
carregaAtributo("com.eage.tf.contas.OpAbEncMass.events.close");

Se eu utilizo a primeira chamada ele funciona normal por ser a classe em execução “Navauto”, mas se utilizo a segunda linha não funciona, da erro que não foi encontrada a classe.

Não sei se estou passando da forma certa a String ou se há outro jeito.

Agradeço desde já ajuda galera.

5 Respostas

Marky.Vasconcelos

O nome da classe é close e é do pacote events mesmo?

iVinny

Sim, o pacote vai até events e a classe é Close, mas esta em um caminho diferente da classe que esta sendo executada.

Marky.Vasconcelos

então a String certa é
com.eage.tf.contas.OpAbEncMass.events.Close
e não
com.eage.tf.contas.OpAbEncMass.events.close

Lembre-se que tudo é case-sensitive.

iVinny

Mark_Ameba:
então a String certa é
com.eage.tf.contas.OpAbEncMass.events.Close
e não
com.eage.tf.contas.OpAbEncMass.events.close

Lembre-se que tudo é case-sensitive.

Mesmo assim não encontra, acabei de testar… e tb não vejo uma forma de encontrar…
o projeto q estou utilizando para recuperar os dados esta em meus documentos e onde esta a classe Close é totalmente diferente de onde esta o projeto…
O q eu quero dizer e entender é como o Java consegue identificar onde esta a classe apenas pelo pacote dela… teria q usar o path da classe close, mas já fiz este teste e não consegui!

iVinny

Alguem???
Help??

Criado 21 de setembro de 2009
Ultima resposta 23 de set. de 2009
Respostas 5
Participantes 2