Ciao,
sono Antonio
spiego il problema e sotto inserirò il codice
ho una classe "main" che crea un Oggetto di tipo A e su di
esso chiama un metodo x(). Tale metodo crea un file B.java.
Vorrei a questo punto che il "main" proseguisse nel suo
lavoro creando un oggetto di classe B e utilizzando i suoi
metodi.
Ovviamente non si può fare.
Il mio main ogni volta lanciato genera la classe B
assegnandogli diciamo un parametro che poi stamperà. Ho
usato quindi
Class b = Class.forName("prova.B");
B bbb =(B) b.newInstance();
e tutta una serie di comande per cercare di risolvere il
problema che è il seguente:
La classe viene creata, riesco a generare anche il .class ma
viene utilizzato l'oggetto B creato nell'esecuzione
precedente, cioè se la classe B è esistente e ha
parametro H e adesso lancio il main che a B da J cmq
stamperà H e la volta seguente J ma a quel punto gli ho
passato L.
Quindi mi serve qualcosa che aggiorni il .class che deve
essere caricato a runtime...
CODICE
allora quest'è la classa che viene utilizzata dal Main che no fa altro che creare un file B.java. Il file B ha al suo interno una variabile di volta in volta diversa che verrà poi stampata su console.
---
public class A
{
public void generare(String prova)
{
try
{
String nameComplete="src\\prova\\B.java";
File f=new File(nameComplete);
FileOutputStream fos;
fos = new FileOutputStream(f);
PrintStream ps=new PrintStream(fos);
ps.println("package prova;");
ps.println("public class B");
ps.println("{");
ps.println("String daStampare=\"" + prova + "\";");
ps.println("public void stampa()");
ps.println("{");
ps.println("System.out.println(daStampare);");
ps.println("return; }");
ps.println("}");
ps.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
-----
la classe B quindi è generata a run time, metre questo è il main:
public class Main extends ClassLoader
{
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException
{
A a = new A();
Scanner in = new Scanner(System.in);
System.out.println("scrivi stringa che dovrà stamapre classe B");
String prova = in.nextLine();
a.generare(prova);
Class c = Class.forName("prova.B");
B b =(B) c.newInstance();
b.stampa();
}
}
-------
lo scopo è quindi far stamapre ogni volta la nuova stringa. Da notare che tutto gira se e solo se è presente la vecchia versione della classe B che è del tipo:
package prova;
public class B
{
String daStampare="eee";
public void stampa()
{
System.out.println(daStampare);
return; }
}
perchè altrimenti quando genere un oggetto di tipo B mi da errore.
grazie mille..
Antonio

Rispondi quotando


