Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di mainetz
    Registrato dal
    Oct 2003
    Messaggi
    132

    [JAVA] Come aspettare che la exec termina?

    Ciao a tutti.

    Ho un applicazione java formata da una decina di thread.

    Questi Thread nel loro metodo run hanno una chiamata di questo genere:

    codice:
    try{
    		Runtime rt = Runtime.getRuntime();
    		Process proc = rt.exec("wget/wget.exe -P " + dest + " "+ source + "");
    				
    		//QUI DEVO ATTENDERE LA FINE DELLA EXEC				
    				
    		System.out.println("FILE " + record[1] + " SALVATO");
    				
    }catch(Exception e){}
    se lascio così come è una volta arrivato alla riga Process proc = rt.exec(..); una volta che ha scritto nella riga di comando .. continua per la sua strada senza aspettare che finisca la exec lanciata. Come posso dirgli di aspettare che finisca l'operazione che ha lanciato nella riga di comando?

    Grazie mille.

    mainetz.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Come aspettare che la exec termina?

    Originariamente inviato da mainetz
    Come posso dirgli di aspettare che finisca l'operazione che ha lanciato nella riga di comando?
    waitFor() di Process.

    P.S. senza offesa alcuna: guardare sulla documentazione javadoc ogni tanto farebbe anche bene. (io personalmente la documentazione la consulto una marea di volte al giorno....).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di mainetz
    Registrato dal
    Oct 2003
    Messaggi
    132
    Ok hai perfettamente ragione!!!

    Avevo già consultato la documentazione..

    e ho inserito waitfor() così:

    codice:
    try{
    	Runtime rt = Runtime.getRuntime();
    	Process proc = rt.exec("wget/wget.exe -P " + dest + " "+ source + "");
    				
    	proc.waitFor();
    	
    	System.out.println("FILE " + record[1] + " SALVATO");
    
    }catch(Exception e){}
    ma così mi si blocca li e non si muove più quando clicco sul bottoncino rosso di eclipse mi parte quello che ho scritto nella riga di comando....

    Scusa per il disturbo.

    E grazie per la tempestiva risposta!!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mainetz
    ma così mi si blocca li e non si muove più quando clicco sul bottoncino rosso di eclipse mi parte quello che ho scritto nella riga di comando....
    Cioè ... non ho capito, è una affermazione o una domanda per un problema? Il waitFor lì dove l'hai messo fa sì che il thread corrente si blocchi finché il 'wget' ha finito.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di mainetz
    Registrato dal
    Oct 2003
    Messaggi
    132
    Ho provato a metterlo così come è scritto sopra.

    Ed è una affermazione.

    Mandando in run l'applicazione java il tutto si blocca finchè io non clicco il bottoncino rosso che stoppa l'applicazione java e allora li wget parte a fare il suo mestiere....

    Scusa se ti rompo ma è quasi di vitale importanza....

    E grazie ancora per la tempestiva risposta!!!!!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mainetz
    Mandando in run l'applicazione java il tutto si blocca finchè io non clicco il bottoncino rosso che stoppa l'applicazione java e allora li wget parte a fare il suo mestiere....
    No aspetta ... scusa ma non l'ho capita. Tu lanci l'applicazione ma è bloccata e devi cliccare su un pulsante di eclipse (che per la cronaca non uso e non conosco) per far partire il wget??

    Non mi è molto chiaro .... Domanda: la tua applicazione ha una interfaccia grafica (es. Swing)? E in tal caso, in che punto del programma fai questa exec()?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di mainetz
    Registrato dal
    Oct 2003
    Messaggi
    132
    No la mia applicazione non ha un intrefaccia grafica...

    Il bottone che io clicco è quello che interrompe l'esecuzione dell'applicazione (che però ha già scritto la riga di comando probabilmente) e appena si interrompe wget va in esecuzione... è come se quel waitfor() facesse qualcosa di diverso dall'aspettare che la exec termini il suo compito...

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io non so che applicazione sia wget.exe, ma non è che è questo wget che si ferma (magari per ottenere un input o qualcosa del genere)?

    Prova a modificare il programma in questo modo (e prova ad avviarlo da riga di comando, lascia perdere eclipse, che potrebbe interferire):
    codice:
    try{
       Runtime rt = Runtime.getRuntime();
       System.out.println("Avvio wget...");
       Process proc = rt.exec("wget/wget.exe -P " + dest + " "+ source + "");
       System.out.println("wget è partito...");
       proc.waitFor();
       System.out.println("wget ha terminato l'esecuzione.");
       System.out.println("FILE " + record[1] + " SALVATO");
    }catch(Exception e){ e.printStackTrace(); }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di mainetz
    Registrato dal
    Oct 2003
    Messaggi
    132
    Ciao e grazie per la risposta..

    Ma come immaginavo mi stampa:
    codice:
    Avvio wget...
    Wget è partito
    ma wget non è partito per nulla.. Proprio perchè wget è un programma che dato un indirizzo internet scarica il file a quell'indirizzo internet e mi accorgo che nella cartella di destinazione non ha scaricato un bel niente. E' proprio la waitfor() che blocca il tutto...

    Nessuno ha idee??

    Il problema grosso secondo me è che il metodo waitfor() è un metodo abstract. Vi copio ciò che ho trovato sull'api di java 1.6.

    waitFor
    public abstract int waitFor()
    throws InterruptedExceptioncauses the current thread to wait, if necessary, until the process represented by this Process object has terminated. This method returns immediately if the subprocess has already terminated. If the subprocess has not yet terminated, the calling thread will be blocked until the subprocess exits.

    Returns:
    the exit value of the process. By convention, 0 indicates normal termination.
    Throws:
    InterruptedException - if the current thread is interrupted by another thread while it is waiting, then the wait is ended and an InterruptedException is thrown.


    Grazie mille!

    Ciao a tutti!

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mainetz
    E' proprio la waitfor() che blocca il tutto...

    Nessuno ha idee??
    No, non è la waitFor il problema (questa blocca solo il thread corrente, non centra con il processo eseguito).
    Devi leggere lo standard-output del processo eseguito, vedi getInputStream() di Process.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.