Chamada de classe dinamica (Resolvido)

10 respostas
jonasjgs2

gente tenho uma classe que chama dinamicamente outra
e funciona legal
porem preciso chamar uma outra classe que funciona em outro pacote
mesmo eu importando a classe do pacote da excessao classnotfound

como fazer para chamar a classe em outro pacote

import PacoteTeste.Teste4;

public class ChamadaDinamica {

    public static void main(String[] args) {

        Object obj;
        String a;

        try {

            String s = "teste2";  // este chamada funciona normalmente
//            String s = "Teste4"; // esta outra classe se encontra em outro pacote e nao funciona
                                          // as duas classes sao iguais     
            obj = Class.forName(s).newInstance();
            a = (String) obj.getClass().getMethod("getNome").invoke(obj);
            System.out.println(a);

        } catch (Exception e) {

            System.out.println("primeira excessao");
            System.out.println(e);

        }

    }
}

class teste2 {
	public teste2 () {
		System.out.println("testado");
		System.out.println("testado2");
		System.out.println("testado3");
		System.out.println("testado4");
		System.out.println("testado5");
	}
	public String getNome() {
		return "funciona";
	}
}

a classe Teste4 em outro pacote que nao consigo chamar

package PacoteTeste;


public class Teste4 {
	public Teste4 () {
		System.out.println("testado");
		System.out.println("testado2");
		System.out.println("testado3");
		System.out.println("testado4");
		System.out.println("testado5");
	}
	public String getNome() {
		return "funciona";
	}
}

10 Respostas

nel

Estamos falando em reflection.
Só muda o nome para Teste2, não fuja do padrão Java Beans, por favor.

Está compilando via IDE ou “na unha” ?

jonasjgs2

estou utilizando o netbeans e ja fiz o teste tambebm
com o eclipse
e os dois me retornam o mesmo problema

daveiga

Está usando o Fully qualified name da classe?

jonasjgs2

tambem ja tentei o Fully qualified

nel

Isso me cheira a problema de classpath e não de invocação.
Está tudo no mesmo projeto ?

jonasjgs2

esta no mesmo projeto

nel

jonasjgs2:
esta no mesmo projeto

Tente assim:

obj = Class.forName("PacoteTeste.Teste4").newInstance();
lina

Oi,

Eu acho que quando usado o Class.forName(String) para pegar classes de outro pacote, deve-se especificar o pacote inteiro da classe.

Por exemplo:

public class ChamadaDinamica {

    public static void main(String[] args) {

        Object obj;
        String a;

        try {

            String s = "PacoteTeste.Teste4"; // esta outra classe se encontra em outro pacote e nao funciona
                                          // as duas classes sao iguais     
            obj = Class.forName(s).newInstance();
            a = (String) obj.getClass().getMethod("getNome").invoke(obj);
            System.out.println(a);

        } catch (Exception e) {

            System.out.println("primeira excessao");
            System.out.println(e);

        }

    }
}

class teste2 {
	public teste2 () {
		System.out.println("testado");
		System.out.println("testado2");
		System.out.println("testado3");
		System.out.println("testado4");
		System.out.println("testado5");
	}
	public String getNome() {
		return "funciona";
	}
}

Tchauzin!

nel

lina:
Oi,

Eu acho que quando usado o Class.forName(String) para pegar classes de outro pacote, deve-se especificar o pacote inteiro da classe.

Tchauzin!

Qualquer classe com pacote, na realidade. Class.forName(String className). Isso pode ser alterado usando o Class.forName(String name, boolean initialize, ClassLoader loader).

jonasjgs2

parabens lina e nel…

tem que chamar com o pacote a string tem que
ser

“PacoteTest.Teste4”

Criado 12 de junho de 2012
Ultima resposta 12 de jun. de 2012
Respostas 10
Participantes 4