Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda cerrar un proceso

Muchachos como estan? tengo un problemita con un proceso externo,
cree en java un process y cuando termina de hacer su próposito no termina nunca,
el programa externo es SoX (un conversor de audio por consola), el código para ejecutarle es bastante simple:

try {
Runtime rt = Runtime.getRuntime();
//Process pr = rt.exec("cmd /c dir");
Process pr = rt.exec("c:/KSTool/ConvertRaw.bat");

BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

String line=null;

while((line=input.readLine()) != null) {
System.out.println(line);
}

int exitVal = pr.waitFor();
System.out.println("Exited with error code "+exitVal);
}
catch(Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}

y estos son los comandos del .bat de SoX..


@cd %~dp0
@mkdir Converted
FOR %%A IN (CFile\*.wav) DO sox -S %%A -r 44100 -b 8 --encoding signed-integer "Converted/%%~nxA.raw" bass 10 treble 25 norm -7.5 equalizer 41.5 18.22q -5.8 equalizer 47.2 7.63q 1.3 equalizer 57.0 10.31q -5.7 equalizer 63.9 14.09q -3.1 equalizer 102 6.62q 1.4 equalizer 118 9.44q -6.2 equalizer 133 15.40q -6.3 remix -
@exit

El programa se ejecuta y nunca acaba, probe con pr.destroy(); pero nada, siempre se queda ejecutando

septiembre 4, 2014 | Registered Commenternewstyl3

Prueba con esto:

ProcessBuilder pb = new ProcessBuilder("c:/KSTool/ConvertRaw.bat");
Process shell = pb.start();
shell.waitFor();
int iResult = shell.exitValue();

septiembre 4, 2014 | Unregistered Commenterfileal_v

Me acabo de dar cuenta que no hace la conversión de todos los ficheros... esto es lo que me devuelve la consola:


C:\KSTool>FOR %A IN (C:/KSTool/*.WAV) DO sox -S %A -r 44100 -b 16 --encoding signed-integer "Converted/%~nxA" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000000.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000000.wav" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000001.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000001.wav" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000002.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000002.wav" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000003.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000003.wav" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000004.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000004.wav" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000005.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000005.wav" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000006.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000006.wav" bass 5 treble 25 highpass 1000 norm -6

C:\KSTool>sox -S C:MS000007.wav -r 44100 -b 16 --encoding signed-integer "Converted/MS000007.wav" bass 5 treble 25 highpass 1000 norm -6

Solo convierte 8 de todos los ficheros (que son 30).. si lo ejecuto desde el .bat directamente lo hace bien; me queda solamente por probar crear un proceso al cual le agrego comandos, pero no tengo ni la menor idea como se hace.

septiembre 5, 2014 | Registered Commenternewstyl3

¿Cómo que no tienes la menor idea de cómo se hace? Si ya lo estás haciendo con el BAT, ¿no?

septiembre 8, 2014 | Registered Commenterrickiees