Newsgroup: it.comp.java
Titolo: compilare runtime

Salve a tutti,
sono nuovo al news e vorrei porre una domanda:
è possibile che un applicazione java mentre è in esecuzione crei e compili
un altro file .java e magari poi lo mandi in esecuzione ?
grazie a tutti per l'interessamento !
A presto (spero)
n.b.: vi prego di non pensare di buttarmi fuori dal news anche se la domanda
è troppo ingenua ;-)

 ha scritto nel messaggio
news:WmsR5.81724$BF.29...@news.infostrada.it...


 questo caso "prova") che ho eseguito col precedente comando ?
e` nella variabile "is", da cui puoi leggerlo e copiarlo sullo schermo
semplicemente iterando (meglio se in un thread apposito, meglio se l'I/O
e` bufferizzato).
-- 
Ciao,  |    Asche zu Asche
Matteo |    und Staub zu Staub

 e` bufferizzato).
non riesco a raccogliere da "is" l'output dei System.out.println() fatti dal
programma che ho mandato in esecuzione, il codice che ho usato ( e che
non mi da il risultato voluto ) è il seguente:
try {
       c = Runtime.getRuntime().exec(commandLine);
        InputStream is = c.getInputStream();
        OutputStream os = c.getOutputStream();
        int i=0;
        while (i<is.available()) System.out.print((char)is.read());
}
forse è inutile raccogliere un System.out.println() ?
Ciao e grazie per l'interessamento !

 
Ciao, credo sia sbagliato il controllo sul ciclo while.
Allego un esempio funzionante (credo: l'ho scritto un po` di fretta! ;),
che utilizza un thread secondario per stampare a video l'output del
Process generato con exec mentre il thread principale semplicemente
aspetta la chiusura per stampare l'exit-code:
// file TestProcess.java
import java.io.*;
public class TestProcess implements Runnable {
   private DataInputStream in; // per leggere l'output del processo
   private PrintStream out;    // per mandare dati in input al processo
   private String cmdLine;     // programma da eseguire
   public TestProcess( String cmdLine ) {
     try {
       this.cmdLine = cmdLine;
       Process p = Runtime.getRuntime().exec( cmdLine );
       in = new DataInputStream( p.getInputStream() );
       out = new PrintStream( p.getOutputStream() );
       new Thread( this ).start();
       System.out.println( "Exit code: " + p.waitFor() );
     } catch( Exception e ) {
        System.err.println( "Errore: "+e.getMessage() );
     }
   }
   public void run() {
      try {
         String s = "";
         while( ( s = in.readLine() ) != null ) {
            System.out.println( "["+cmdLine+"] " + s );
         }
      }catch( IOException e ) {
         System.out.println( "Il thread ha chiuso a causa di"
                             +e.getMessage() );
      }
   }
   public static void main( String[] args ) {
      if( args.length > 0 ) {
        TestProcess t = new TestProcess( args[0] );
      } else {
        System.err.println( "Sintassi: TestProcess  CMD-LINE" );
      }
   }
}
// :~
Una volta compilato (da notare che DataInputStream.readLine() e`
deprecated: dovresti usare un BufferedReader...) puoi provare a fargli
stampare questo stesso sorgente:
se usi Linux puoi provarlo con
$  java TestProcess  "cat TestProcess.java"
mentre con windows
C:>  java  TestProcess  "type TestProcess.java"
cat (cosi` come type) e` un programma che stampa delle stringhe sul
proprio standard output. TestProcess le intercetta e le stampa invece a
video facendo precedere ogni linea dalla riga di comando passata ad
exec.   ...o almeno: dovrebbe! ;)
Se hai ancora problemi, fammi sapere.


 ha scritto nel messaggio
news:3A183E65...@libero.DALLO-SPAM.it...


 
...spero non per colpa del mio codice!! ;-)
bentornato!
-- 
Ciao,  |  I play Russian roulette everyday, a man's sport,
Matteo |  With a bullet called life, yeah called life, (SUGAR)