Então, passo duas Strings como parametro, pq a classe a ser invocada usa dois argumentos(String args[] ).. será q pelo fato da classe a ser invocada possuir um main() da erro na hora de criar o Constructor??
Debugando o código da NoSuchMethodException na linha Constructor ct = classe.getConstructor(paramTypes);
privateObjectgetClassInstance(){try{Class<?>classe=Class.forName("br.com.snap.diof.download.Download"+Tela.getCaderno());ClassparamTypes[]=newClass[2];paramTypes[0]=String.class;paramTypes[1]=String.class;Constructorct=classe.getConstructor(paramTypes);// Constructor ct[] = classe.getConstructors();ObjectargList[]=newObject[2];argList[0]=newString(tela.leDataTela());argList[1]=m_data;ObjectreturnObj=ct.newInstance(argList);returnct.newInstance(argList);// return null;}catch(ClassNotFoundExceptione){System.out.println("Classe não encontrada");e.printStackTrace();}catch(SecurityExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(NoSuchMethodExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IllegalArgumentExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(InstantiationExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IllegalAccessExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(InvocationTargetExceptione){// TODO Auto-generated catch blocke.printStackTrace();}returnnull;}
Os argumentos estão no construtor ou são os argumentos do main mesmo ??
Nunca trabalhei dessa forma, instanciando objetos que tem main…
Z
zoren
Isso não dá problema, vc tem esse construtor mesmo, com esses tipos?
J
jimmyhc
aonde que está esse type: “br.com.snap.diof.download.Download”
Issso ja aconteceu comigo… problema de classloader da aplicação.
Tenta colocar esse class dentro do mesmo projeto.
A
arthurmenezes
cara o main não é obrigatório… a principio tinha main na classe… mas com isso não tem necessidade de mante-lo
tipo… o contrutor recebe uma String e um Obj Data
construtor(String str, Data data)
ja fiz o teste sem o main na classe a ser invocada e usei os args do jeito que está mostrado ai no contrutor.
já fiz teste com main na classe a ser invocada e passei duas Strings como args… nas duas tomei exception
to começando a achar que o erro está no jeito que estou passando os args ClasseX.class! não faço a minima idéia de corrigir… primeira vez que uso refelction
G
Guitar_Men
Eu acho que se fosse problema de não encontrar a classe daria um ClassNotFoundException. De duas uma, ou o construtor não existe ou os argumentos que estão sendo passados para ele estão com o tipo errado…
Z
zoren
arthurmenezes:
cara o main não é obrigatório… a principio tinha main na classe… mas com isso não tem necessidade de mante-lo
tipo… o contrutor recebe uma String e um Obj Data
construtor(String str, Data data)
ja fiz o teste sem o main na classe a ser invocada e usei os args do jeito que está mostrado ai no contrutor.
já fiz teste com main na classe a ser invocada e passei duas Strings como args… nas duas tomei exception
to começando a achar que o erro está no jeito que estou passando os args ClasseX.class! não faço a minima idéia de corrigir… primeira vez que uso refelction
Coloca aqui a classe que vc está tentando acessar por reflexão
A
arthurmenezes
packagebr.com.snap.diof.download;importjava.io.File;importjava.net.URL;importjava.util.Properties;importjava.util.logging.Logger;importbr.com.snap.diof.DiofUtil;importbr.com.snap.net.HttpDownload;importbr.com.snap.util.Data;publicclassDownloadSTJimplementsDownload{publicstaticLoggers_log=Logger.getAnonymousLogger();privatestaticStringHOST="http://dj.stj.jus.br/";privatestaticStringCADERNO="stj";privateStringm_raiz;privateDatam_data;privateHttpDownloadm_downloader=newHttpDownload();DownloadSTJ(Stringraiz,Datadata){s_log.info("DOWNLOAD STJ - Início");s_log.info("obtendo pagina de índice...");m_raiz=raiz;m_data=data;try{processaDownload();}catch(Exceptione){s_log.severe("Erro no Download do arquivo!!!");e.printStackTrace();}s_log.info("DOWNLOAD STJ - FIM");}privatevoidprocessaDownload()throwsException{URLurl=newURL(HOST+m_data.getDataDb()+".pdf");StringarqOut=diretorio()+File.separator+CADERNO+".pdf";s_log.info("Iniciando download do arquivo da url: "+url);Stringarquivo=m_downloader.getDownload("[pdf]",url,arqOut,newProperties());s_log.info("recebidos "+arquivo.length()+" bytes");}privateStringdiretorio(){StringBuildersb=newStringBuilder().append(m_raiz).append(File.separator).append(CADERNO).append(File.separator).append(DiofUtil.dataComPontos(m_data.getDataDb()));returnsb.toString();}// public static void main(String[] args) {// if (args.length < 2) {// s_log.severe("Parametros: <Diretorio Raiz> <dd/mm/aaaa> [<dd/mm/aaaa>...]");// } else {// for (int i = 1; i < args.length; i++) {// Data data = DiofUtil.dataDe(args[i]);// if (!data.dataValida()) {// throw new IllegalArgumentException("Data inválida! " + args[i]);// } else {// new DownloadSTJ(args[0], DiofUtil.dataDe(args[i]));// }// }// // }// // }}
A
arthurmenezes
aonde que está esse type: “br.com.snap.diof.download.Download”
Issso ja aconteceu comigo… problema de classloader da aplicação.
Tenta colocar esse class dentro do mesmo projeto.
Está no mesmo projeto… porém em pacotes diferentes… o que não faz mto sentido de dar erro
G
Guitar_Men
O segundo parâmetro é do tipo Data e vc ta passando um Object. Tentou forçar um cast ??
ah sim…mals ai… mas ali eu postei um código que troquei os args pra testar… mas ja mudei
Z
zoren
Varargs aceitam arrays de boa, isso não aconteceria
G
Guitar_Men
Você chegou a fazer testes sem passar parâmetros no construtor ??
Z
zoren
Lista todos os construtores da sua classe
Você por acaso compilou a sua classe?
J
jimmyhc
então realmente não é problema no ClassLoader
arthurmenezes:
aonde que está esse type: “br.com.snap.diof.download.Download”
Issso ja aconteceu comigo… problema de classloader da aplicação.
Tenta colocar esse class dentro do mesmo projeto.
Está no mesmo projeto… porém em pacotes diferentes… o que não faz mto sentido de dar erro
Z
zoren
Cola o stacktrace completo aqui também pra gente ver
M
Marky.Vasconcelos
Seu construtor é com o modificador (Sem modificadores), voce com o getConstructor pega apenas o publico.
Faça getDeclaredConstructor invés de getConstructor.
E como provavelmente vai lançar uma exception por causa de ser privado, mude para acessible(true).
A
arthurmenezes
java.lang.NoSuchMethodException: br.com.snap.diof.download.DownloadSTJ.<init>(java.lang.String, br.com.snap.util.Data)
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getConstructor(Class.java:1657)
at br.com.snap.diof.download.controle.ControleDownload.getClassInstance(ControleDownload.java:46)
at br.com.snap.diof.download.controle.ControleDownload.actionPerformed(ControleDownload.java:83)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6237)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6002)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4604)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4434)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4434)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
G
Guitar_Men
Conforme o zoren disse, lista os construtores da sua classe…
importjava.lang.reflect.*;publicclassConstructor1{publicConstructor1(){}protectedconstructor1(inti,doubled){}publicstaticvoidmain(Stringargs[]){try{Classcls=Class.forName("constructor1");Constructorctorlist[]=cls.getDeclaredConstructors();for(inti=0;i<ctorlist.length;i++){Constructorct=ctorlist[i];System.out.println("nome = "+ct.getName());System.out.println("membro da classe = "+ct.getDeclaringClass());Classpvec[]=ct.getParameterTypes();for(intj=0;j<pvec.length;j++)System.out.println("parâmetro #"+j+" "+pvec[j]);Classevec[]=ct.getExceptionTypes();for(intj=0;j<evec.length;j++)System.out.println("exceção #"+j+" "+evec[j]);}}catch(Throwablee){System.err.println(e);}}}