Newsgroup: it.comp.java
Titolo: come istanziare dinamicamente il metodo main di una classe qualsiasi?

Vorrei scrivere una sorta di Listener che interecetti dei messaggi provenienti da un altro ambiente sotto forma di stringa (questa parte l'ho gia` scritta) e istanzi dinamicamente il metodo main di una classe Java qualsiasi dedotta dal parse della stringa.
Esempio : se mi arriva il messaggio :
String msg = "esempi.Esempio 124 pippo pluto" ;
Vorrei fare una cosa equivalete a :
String[] args = {"124","pippo","pluto"} ;
esempi.Esempio(args) ;
Come posso fare?
Ciao, Cris
-- 
Cristian Veronesi - CRPA SpA - Reggio Emilia, Italy
Man survived hither to / because he was too ignorant /
to know how to realize his wishes (William Carlos Williams)

 esempi.Esempio(args) ;
Forse volevi scrivere: esempi.Esempio.main(args);
Puoi utilizzare le Reflection API, ad esempio:
1) Crei un oggetto di tipo Class usando:
Class clazz = Class.forName("esempi.Esempio");
2) Ottieni il metodo main con getMethod():
Method meth = clazz.getMethod("main",paramTypes);
(dove paramTypes e' un array che contiene le classi
che corrispondono ai tipi degli argomenti del metodo,
in questo caso un solo java.lang.String[])
3) Usi il metodo invoke della classe Method:
meth.invoke(null,arguments);
Dove 'arguments' e' un array di oggetti che corrispondono
agli argomenti che devono essere passati, in questo caso
un solo array di stringhe (cioe' il tuo 'args')
Se quello che ho scritto non ti e' molto chiaro, ti posso
mandare un esempio.
--
Ciao. Leonardo 
bos...@uno.it
 
www.uno.it/utenti/tetractys
try {
Class[] param = {Class.forName("java.lang.String[]")};
.getMethod("main"
} catch(Exception e) {
e.printStackTrace();
}

 mandare un esempio.
-- 


Scusa, mi rispondo da solo: la chiamata giusta sembra essere:
Class.forName("[Ljava.lang.String;")
Anche se non capisco da dove salti fuori questa sintassi.
Ciao, Cris


primo piano ;) ).
Non, non lo e': piu' banalmente, il nome della classe di un oggetto
array, in Java, non e' quello. La classe di array di interi ha nome I[,
di long L[, eccetera (non ricordo con *precisione* - al limite dimmi e li
ritrovo). 
Pero' non capisco che senso abbia usare Class.forName() su una classe
array (tali classi, ne' cosa tu intendi per "instanziare il metodo main". Un 
metodo non si
instanzia, lo si invoca su un'oggetto - che e' quello che si istanzia. Mi pare  
a spanne - che tu stia facendo un po' di confusione. 
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/

 Mi pare a spanne - che tu stia facendo un po' di confusione.
Scusami, e` stato un lapsus, e` che andavo di fretta e ho fatto un po' di confusione linguistica, ma il concetti in testa ce li ho chiari (almeno credo 8|). Per fortuna Leonardo Boselli mi ha capito lo stesso. Adesso il mio accrocchio funziona... altro che m+--a, nella mia decennale carriera di programmatore non mi era mai capitato di incontrare delle funzionalita` "metalinguistiche" cosi` potenti ed eleganti (Clipper? ;))
Grazie per l'aiuto e scusa per la confusione
Ciao, Cris


cosi` potenti ed >eleganti (Clipper? ;)) 
Eh, parole sante. :)


 Class.forName("[Ljava.lang.String;")
Per sbaglio non ho cancellato l'esempio errato dopo la firma.
Scusa se ti ho portato fuori strada.
