Newsgroup: it.comp.java
Titolo: Class.forName : CHI MI AIUTA!!!!!!!!!!!!!!!!!!!!!!!!!!!

Spero che tra di vio ci sia un'anima così pia da aiutarmi.
Per motivi solo di studio ho creato una semplice classe, che ha un
costruttore che accetta un nome di files (STring fileName) in ingresso.
A questo punto voglio che la classe lo carichi e controlli se esiste un
metodo nella classe caricata.
Fin quì ci sono riuscito.
Il mio problema è che voglio invocare quel metodo. Ho fatto molti tentativi,
ma mi scaturisce sempre un' "ILLEGALARGUMENTEXCEPTION".
Ho consultato la documentazione ma (e questa è una cosa di JAVA che mi fa
inc..............................re) è poco chiara, non c'è un'esempio,
strano che ci abbiano dedicato tutte quelle righe, di solito oltre a dire
che è un metodo di una classe non fanno.
Perchè al metodo INVOKE devo passargli un Object e un array di Object?
Dove li vado a pescare e a cosa corrispondono?
Qui di seguito allego il codice che sto studiando, se qualcuno mi da dei
consigli, su come metterlo a posto e come migliorarlo, gli ne sarei grato.
try{            
            Class first = Class.forName(fileName1);
            Class second = Class.forName(fileName2);              
 
            Class[] argument = new Class[0];
            try
            {
                Method isCompatible = first.getMethod("getHandle",argument);                     
                try
                {
                    Object[] obj = new Object[0];                    
                    isCompatible.invoke(argument,obj);
                    file://Component c = (Component) 
                }
                catch(IllegalAccessException e)
                {
                    System.out.println("Errore di Accesso");
                    System.out.println(e);
                }
                catch(IllegalArgumentException e)
                {
                    System.out.println("Errore nel passaggio dei parametri");
                    System.out.println(e);
                }
                catch(java.lang.reflect.InvocationTargetException e)
 
               {
                    System.out.println("Errore di Invocazione");
                    System.out.println(e);
                }
                catch(Exception e)
                {
                    System.out.println("Errore generico");
                    System.out.println(e);
                }
            }catch(NoSuchMethodException e)
             {
                System.out.println("Method not found");
                System.out.println(e);
             }
             catch(SecurityException e)
             {
                System.out.println("Security Violation");
                System.out.println(e);
             }
        }catch(ClassNotFoundException e){}
Vi ringrazio infinitamente : Danilo Cividin
dciv...@tiscalinet.it

Perchč al metodo INVOKE devo passargli un Object e un array di Object?
invoke e' un modo "generico" di attivare un metodo di una classe. Il
metodo e' dell'oggetto "Method", ora, dato che lui non ha la piu'
pallida idea di cosa sta' facendo tu devi specificargli SU QUALE
oggetto deve tentare di eseguire il metodo e tutti i parametri.
Ergo: l'Object che lui richiede e' l'istanza dell'oggetto su cui 
tale metodo sara' cercato, mentre l'array di Object sono tutti i
parametri necessari.
Esempio:
supponiamo che tu hai una String x su cui vuoi eseguire il metodo
compareTo(), ed hai il tuo Method m gia' creato:
Object[] o = { "pippo" };
m.invoke( x, o );
Questo e' equivalente a fare
x.compareTo( "pippo" );
Davide