Post

Visualizzazione dei post con l'etichetta Buffer

Stallo con Java process.waitFor()

DOMANDA: Nell'eseguire un programma esterno con Runtime.exec(), perché se uso il metodo process.waitFor() va tutto in stallo? package process; import java.io.IOException; public class ProcessTest {     public static void main(String[] args)                        throws IOException, InterruptedException {         Runtime runtime = Runtime.getRuntime();         Process process = runtime.exec( "cmd /C C:\\ffmpeg -i C:\\input.avi C:\\output.avi" );         process.waitFor();         System.out.println( "FINE" );     } } RISPOSTA: Eseguendo il codice della domanda, la stringa "FINE" non verrà mai eseguita. La causa del problema è la bufferizzazione di stdout e stderr . Infatti spesso capita che i dati in arrivo ai vari stream non siano sufficienti a riempire completamente i buffer. Quindi, finché i buffer non sono pieni, restano in attesa di input, lasciando il programma in stallo. La soluzione è quindi forzarne lo svuotamen