Reflection sempre cai em exceptions

11 respostas
S

Salve!

tentei usar reflection aqui, mas sempre cai na exception. Não faço idéia de onde esteja errando… algum palpite?

try{
             Class<?> queroInstanciar = Class.forName("net.bonetechnology.Casa");   

             Constructor<?> ctor =  Class.class.getConstructor();   
Object x = ctor.newInstance(); 

             }catch(Exception e){System.out.println("o cliente não tem o arquivo");}

11 Respostas

T
Class<?> queroInstanciar = Class.forName("net.bonetechnology.Casa");

Se o seu default classloader (ou seja, aquele que usa o CLASSPATH para puxar as classes) não está apontando para o diretório ou JAR onde está essa tal classe, você vai obter queroInstanciar = null.

Onde estão as classes? Dependendo, você vai ter de criar um classloader (veja URLClassLoader).

Alexandro.Almeida

Detalhes… ?
Qual Exception?

victorwss

http://www.guj.com.br/posts/list/106698.java#576324

S

ops, desculpe o descuido xD:

tá dando essa aqui:

java.lang.NoSuchMethodException: java.lang.Class.<init>()
        at java.lang.Class.getConstructor0(Class.java:2706)
        at java.lang.Class.getConstructor(Class.java:1657)
        at net.bonetechnology.ConverteOrdem.Converte(ConverteOrdem.java:46)
        at net.bonetechnology.Casa$1.run(Casa.java:61)
S

então thingol, as classes estão no mesmo diretório. de qualquer forma, to dando uma olhada na api, obrigado =)

Alexandro.Almeida

O problema é que a classe net.bonetechnology.Casa não tem um construtor default

tipo

public class Casa {

/**
* Construtor default
*/
 public Casa() {
 }

.
.
.
.
.
}
S

opa, coloquei errado. Eu tinha posto a classe Casa só pra testar, mas o verdadeiro e DesligaTudo.

A resposta é:

at java.lang.Class.getConstructor0(Class.java:2706)
        at java.lang.Class.getConstructor(Class.java:1657)
        at net.bonetechnology.ConverteOrdem.Converte(ConverteOrdem.java:46)
        at net.bonetechnology.Casa$1.run(Casa.java:61)

para o trecho:

Class<?> queroInstanciar = Class.forName("net.bonetechnology.DesligaTudo");   

             Constructor<?> ctor =  Class.class.getConstructor();   
Object x = ctor.newInstance();

onde a classe Desliga tudo ficou :

package net.bonetechnology;

/**
 *
 * @author eduardoc
 */
public class DesligaTudo {
    DesligaTudo(){
    System.out.println("Funcionou!");
    }

}
Alexandro.Almeida

O construtor DesligaTudo() não é publico.

victorwss

http://www.guj.com.br/posts/list/106698.java#576351

Cara, evita de ficar criando tópicos duplicados porque senão fica isso, metade em um lado, metade do outro e fica difícil acompanhar.

S

beleza, vou perguntar só no outro então.

Desculpe

T

Pra ajudar vou bloquear este tópico aqui.

Criado 17 de outubro de 2008
Ultima resposta 17 de out. de 2008
Respostas 11
Participantes 4