|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
|
Ancora sulla java.lang.reflect
Ciao a tutti!
Ho un nuovo problema sui metodi della reflect. Nella mia applicazione ho un array di stringhe chiamato arrayNomeImmagni; Vi è inoltre un altro array di stringhe chiamato arrayAttori; Vorrei che mi aiutasse a capire cosa non va nel seguente Frammento del mio codice: for(int j = 0; j < arrayAdapter.length;j++){ try{ Class classeAttore = ClassLoader.getSystemClassLoader().loadClass(arrayAttori[j]);//carico una classe che si chiama come la stringa dentro questo array Method m = classeAttore.getMethod("setImageResourceName",new Class[]{java.lang.String.class});//setIImageResourceName e' un metodo void della classe che ho caricato e che prende in ingresso una stringa m.invoke(arrayNomeImmagini[j]);//faccio la invoke sul metodo passandogli per parametro un elemento del vettore di stringhe } //qui sotto vi sono tutte le eccezioni del caso catch(ClassNotFoundException cne){ cne.printStackTrace(); } catch(NoSuchMethodException nsm){ nsm.printStackTrace(); } catch(IllegalAccessException ia){ ia.printStackTrace(); } catch(InvocationTargetException it){ it.printStackTrace(); } }//end ciclo for Il programma compila senza problemi, ma quando mando in esecuzione il main viene sollevata un eccezione e visualizzato sulla shell il seguente messaggio: Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) Come mai? Sono sicuro che il metodo setImageResourceName esiste ed e' definito come ho gia detto, inoltre sono sicuro che nell'array di stringhe ci sono elementi non nulli.
__________________
God rides DUCATI! |
|
|
|
|
|
#2 |
|
Messaggi: n/a
|
PENSO che il problema sia qui:
Method m = classeAttore.getMethod("setImageResourceName",new Class[]{java.lang.String.class}); se scrivi così il compilatore crea un array che contiene l'array definito con "new Class[]{java.lang.Strinc.class}" prova a sostituire con Method m=classeAttore.getMethod("setImageResourceName",java.lang.String.class); P.S. nel ciclo for c'è un erroretto: for(int j = 0; j < arrayAdapter.length;j++) di darà ArrayIndexOutOfBoundException, correggi con for(int j = 0; j < arrayAdapter.length-1;j++) |
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
|
Niente da fare...continua a dare lo stesso errore...
__________________
God rides DUCATI! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
|
Ho risolto: la Invoke deve essere fatta su un oggetto di tipo classeAttore (e quindi devo prima crearne un' instanza), per questo non funzionava!
__________________
God rides DUCATI! |
|
|
|
|
|
#5 |
|
Messaggi: n/a
|
già, non avevo visto. Ma come mai ti interessa così tanto la reflection?? Io (essendo inesperto e alle prime armi) non ne vedo molti utilizzi pratici, tranne che la gestione di plugin forse...
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:11.



















