Erro em Java Relection

3 respostas
H

Eu fui testar um dos códigos desse artigo http://www.guj.com.br/articles/10 sobre Reflection e quando fui rodar deu este erro:

java.lang.NoClassDefFoundError: exemploreflection/Main
Caused by: java.lang.ClassNotFoundException: exemploreflection.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: exemploreflection.Main. Program will exit.
Exception in thread "main" Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Eu só copiei e colei o código, não mudei nada:

import java.lang.reflect.*;

public class Classe1 {

    private int funcao1(Object p, int x) throws NullPointerException {
        if (p == null) {
            throw new NullPointerException();
        }
        return x;
    }

    public static void main(String args[]) {
        try {
            Class cls = Class.forName("Classe1");
            Method methlist[] = cls.getDeclaredMethods();

            for (int i = 0; i < methlist.length; i++) {
                Method m = methlist[i];
                System.out.println("nome = " + m.getName());
                System.out.println("membro da classe = " + m.getDeclaringClass());
                System.out.println("modificador = " + Modifier.toString(m.getModifiers()));
                Class pvec[] = m.getParameterTypes();

                for (int j = 0; j < pvec.length; j++) {
                    System.out.println("parâmetro #" + j + " " + pvec[j]);
                }

                Class evec[] = m.getExceptionTypes();
                for (int j = 0; j < evec.length; j++) {
                    System.out.println("exceção #" + j + " " + evec[j]);
                }

                System.out.println("tipo de retorno = " + m.getReturnType());
                System.out.println("-----");
            }
        } catch (Throwable e) {
            System.err.println(e);
        }
    }
}

Alguma ideia do que pode ser?

3 Respostas

davidbuzatto

Você deve estar usando o NetBeans certo?
O que acontece é que ele não está encontrando a classe que deve iniciar a execução.

Para resolver isso, o código que você colou deve ser a classe Main e estar contido dentro do pacote “exemploreflection”.
Ou então, vc deve entrar nas propriedades do projeto e configurar a classe principal como a classe que você etsá usando (Classe1)
Ou ainda, você pode executar apenas a classe em questão, usando o atalho Shift+F6.

[]'s

Luiz_Augusto_Prado

Eu nunca fiz reflection da classe que está sendo executada.
Reflection dela mesma?
se não for este o problema então certamente é porque vc não informou o pacote da classe que quer fazer a reflexão.

H

Funcionou

Mudei o nome da classe pra Main e coloquei dentro do pacote. Era exatamente o que vocês disseram.

Valeu :smiley:

Criado 12 de outubro de 2011
Ultima resposta 12 de out. de 2011
Respostas 3
Participantes 3