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…
zoren
Isso não dá problema, vc tem esse construtor mesmo, com esses tipos?
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
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…
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
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
zoren
Varargs aceitam arrays de boa, isso não aconteceria
Guitar_Men
Você chegou a fazer testes sem passar parâmetros no construtor ??
zoren
Lista todos os construtores da sua classe
Você por acaso compilou a sua classe?
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
zoren
Cola o stacktrace completo aqui também pra gente ver
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)
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);}}}