Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Java: Runtime.getRuntime().exec(...) Einbindung von lame.exe?

und_Roy / 2 Antworten / Baumansicht Nickles

Hi,


ich versuche schon seit längerem das Programm lame.exe (mp3-konverter) als Prozess in einem Java-Programm laufen zu lassen. Das Problem ist nun, dass sich das Programm immer aufhängt, wenn ich lame.exe aus Java starte. Unten steht der relevante Quellcode...


Probiert habe ich schon folgendes:


Aufruf direkt im exec-Argument, Aufruf als Batch (wie im Beispiel), habe den Inputstream des Prozesses ausgelesen (der ist leer).


Mir fällt nichts mehr ein, deshalb würde es mich freuen, wenn jemand eine Idee hat, die mich weiterbringen könnte.


 


Gruß, Roy


 


PrintWriter encode = new PrintWriter(new FileOutputStream("encode.bat"));
StringBuffer stueck = new StringBuffer(pfadangabevoll);
String rein = stueck.substring(0,pfadangabevoll.length()-3);
String wav = rein+"wav";
String mp3 = rein+"mp3";
String eingab1 = "lame -h " +wav+" "+mp3;


//hier steht dann sowas wie: "lame -h g:\test.wav g:\test.mp3
String eingab3 = "exit";
encode.println(eingab1);
encode.close();
Process enc = Runtime.getRuntime().exec("encode.bat");
enc.waitfor();

bei Antwort benachrichtigen
hudson1 und_Roy „Java: Runtime.getRuntime().exec(...) Einbindung von lame.exe?“
Optionen

Hi erst mal,

hab derzeit das gleiche problem, scheinbar schickt lame keinen exitCode zurück.

Wie hast Du das Problem gelöst??

danke und Gruß aus Oberfranken

hudson

bei Antwort benachrichtigen
und_Roy hudson1 „Hi erst mal, hab derzeit das gleiche problem, scheinbar schickt lame keinen...“
Optionen

Hallo,

man muss beide Streams auslesen und dies dazu in zwei unabhängigen Threads.
Hier mein Code. Ist zwar nicht super sauber, funktioniert aber einwandfrei:

String eingab1 = "lame -h " +wav+" "+mp3;
Process enc = Runtime.getRuntime().exec(eingab1);
InputStream in = enc.getInputStream();
InputStream err = enc.getErrorStream();
final BufferedReader br = new BufferedReader(new InputStreamReader(in));
final BufferedReader er = new BufferedReader(new InputStreamReader(err));
new Thread() {
public void run() {
try {
String zeile;
StatusDisplay sd = new StatusDisplay(haupt);
while( (zeile = er.readLine()) != null){
sd.setall(zeile);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Fehler beim Konvertierungsvorgang,\n bitte erneut versuchen" ,"Fehlermeldung",JOptionPane.WARNING_MESSAGE);}
}
}.start();
new Thread() {
public void run() {
try {
String zeile;
while( (zeile = br.readLine()) != null){
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Fehler beim Konvertierungsvorgang,\n bitte erneut versuchen" ,"Fehlermeldung",JOptionPane.WARNING_MESSAGE);
}
}
}.start();
enc.waitFor();

Viele Grüße,
Roy

bei Antwort benachrichtigen