Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    30

    [Java]: problema con exec

    Salve,

    nell'effettuare la conversione di video avi in png con le seguenti righe di codice:
    codice:
            proc=Runtime.getRuntime().exec("mplayer " + inputFileName + " -vo png ");
            proc.waitFor();
    Ho inserito una waitFor() proprio perchè il programma nell'andare avanti deve avere a disposizione tutti i file png.

    fin quando uso video brevi(22s ed anche 28s) tutto va bene, invece ho notato che per un video di 38 secondi il programma si blocca prorpio in quelle righe di codice.

    sapete darmi una spiegazione?
    Grazie

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

    Re: [Java]: problema con exec

    Originariamente inviato da robs05
    il programma si blocca prorpio in quelle righe di codice.

    sapete darmi una spiegazione?
    Il programma che lanci, quel "mplayer", scrive qualcosa sullo standard output/error?? Se sì, allora dovresti leggerlo. Per questioni interne di buffering, se il processo lanciato scrive molta roba su std-out/err e tu non la leggi dalla tua applicazione java, il processo che hai lanciato si blocca.
    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
    Registrato dal
    Jan 2007
    Messaggi
    30
    Ho provato cosi
    codice:
            proc=Runtime.getRuntime().exec("mplayer " + inputFileName + " -vo png ");
            BufferedReader read=new BufferedReader(new InputStreamReader(proc.getInputStream()));
            while(read.ready()) {
                String line = read.readLine();
                System.out.println(line);
            }
            proc.waitFor();
    Ma comunque si blocca

    questo è quello che stampa
    codice:
    MPlayer 29092-4.4.0 (C) 2000-2009 MPlayer Team
    
    Playing /home/video/walking/person01_walking_d3_uncomp.avi.
    AVI file format detected.
    [aviheader] Video stream found, -vid 0
    AVI: No audio stream found -> no sound.
    mentre per i video più corti stampa tutto l'output della conversione

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ecco come devi fare, devi leggere tutto in thread separati (anche a me l'ha inseganto il buon andibin )

    codice:
    	// FUNZIONE PER ESEGUIRE UN FILE .EXE O .BAT
    	public int runFile(String pathfile){
    		
    		int exitVal = 0;
    		String errors = "";
    		
    		try {
    
    			Runtime rt = Runtime.getRuntime();
    			Process proc = rt.exec(pathfile);
    			
                StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");            
                StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
    
                errorGobbler.start();
                outputGobbler.start();
    			
    			exitVal = proc.waitFor();
    			errors = errors + "Process exitValue: " + exitVal;
    			
    		} catch (Throwable t){
    			
    			// SCRITTURA LOG
    			System.out.println("JAVA ERROR " + t.getMessage());
    			exitVal = -1;
    			
    		}
    		
    		return exitVal;
    
    	}
    	
    	// CLASSE INTERNA PER LETTURA STREAM
    	class StreamGobbler extends Thread
    	{
    	    InputStream is;
    	    String type;
    	    
    	    StreamGobbler(InputStream is, String type)
    	    {
    	        this.is = is;
    	        this.type = type;
    	    }
    	    
    	    public void run()
    	    {
    	        try
    	        {
    	            InputStreamReader isr = new InputStreamReader(is);
    	            BufferedReader br = new BufferedReader(isr);
    	            String line=null;
    	            while ( (line = br.readLine()) != null)
    	                System.out.println(type + ">" + line);    
    	            } catch (IOException ioe)
    	              {
    	                ioe.printStackTrace();  
    	              }
    	    }
    	}
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    30
    Grazie ho risolto...

    era proprio il problema del buffer pieno che non veniva svuotato

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 © 2026 vBulletin Solutions, Inc. All rights reserved.