Newsgroup: it.comp.java
Titolo: Lanciare un programma esterno

Ciao a tutti!
Ho un problema nel lanciare eseguibili esterni da un programma Java.
Sto sviluppando il mio programma tramite Eclipse. Ho scritto la
seguente classe:
public class ExternalProgram extends Thread{
	String[] command = {"cmd","/C","start", null};
	ExternalProgram(String s){
		command[3] = s;
	}
	public void run(){
        String line = null;
		try{
            Process pr = Runtime.getRuntime().exec(command);
            InputStream in = pr.getInputStream();
            InputStreamReader isr = new InputStreamReader(in);
            BufferedReader br = new BufferedReader(isr);
            while ( (line = br.readLine()) != null)
                System.out.println(line);
        }catch(Exception e){
            e.printStackTrace();
        }
	}
}
L'eseguibile si trova nella cartella C:\Users\Emanuele\workspace
\SocialNetworkInterface\crawler\crawler.exe. Quindi creo un oggetto di
tipo ExternalProgram ep = new ExternalProgram("workspace/
SocialNetworkInterface/crawler/crawler.exe"). Poi chiamo ep.start() ma
il programma non parte, mi dice che non riesce a trovare il percorso
specificato. Ho provato anche a spostare l'eseguibile nella cartella C:
\Users\Emanuele ma anche lì è la stessa cosa. Dove sto sbagliando?


Ci sono riuscito!!!! Ho scritto la seguente istruzione ed ora tutto
funziona come dovrebbe:
Process pr = Runtime.getRuntime().exec(command,null, new File
(System.getProperty("user.home") + "\\workspace\\SocialNetworkInterface
\\crawler"));
Ora però una domanda: questo programma stampa delle cose a schermo
mentre è in esecuzione; come posso catturare quello che lui stampa per
metterlo in una JTextArea in modo da costruire una sorta di log in
tempo reale? Spero di essermi spiegato.
Grazie.


Ah inoltre ho anche bisogno di interrompere l'esecuzione del programma
in qualunque momento io voglia. Ho provato a chiamare interrupt() ma
sembra che non abbia effetto.

 Consiglio: leggi il javadoc di Runtime e di Process.
L'ho letto. Come puoi vedere dal codice, per provare, stampo ogni
linea dell'output su System.out:
InputStream in = pr.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
while ( (line = br.readLine()) != null)
  System.out.println(line);
Ma non stampa nulla. Quando parte il programma si apre una finestrella
del prompt di DOS e scrive tutto là sopra.

 Una googlata te lo avrebbe detto subito.
Aspetta ma tu a quale problema di stai riferendo? Al fatto che non si
interrompe quando lancio ep.interrupt()?


Comunque è la stessa cosa. Anche aggiungendo waitFor() non stampa
nulla e il programma non si interrompre quando lancio interrupt().

il 18/01/2009 12.37, Scrive Emanuele Gallo 43875208:

Probabilmente dovresti implementare il metodo interrupt() in modo da 
eseguire il destroy() del Process, qualcosa come:
public void interrupt() {
   process.destroy();
   super.interrupt();
}
altrimenti chi glielo dice di fermarsi?
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'