DesmoColo
28-02-2006, 16:17
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.
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.