ProcessBuilder ext. Programm starten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ProcessBuilder ext. Programm starten

    Hallo,

    ich muss leider nochmal um Hilfe bitte :(. Ich versuche gerade aus Java LAME aufzurufen und dann dort einige .wav Dateien zu .mp3 umwandeln.

    Mein Problem ist das ich es zuerst mit Runtime.getRuntime() gemacht habe und dort auch grob geklappt hat nur allerdings funktionierte waitFor() nicht. Es wurden dann mehrere Prozesse gleichzeitig gestartet + Konsolen Ausgabe wodurch das ziemlcih chaotisch aussieht...

    Ich hab dann gelesen das es ab Java 5 nur noch mit ProcessBuilder gemacht werden sollte. Ich habd as jetzt umgenwandelt, aber er startet jetzt gar nciht mehr den Prozess.

    Quellcode

    1. int i = 0;
    2. for(Track t : trackList)
    3. {
    4. File path = new File(System.getProperty("user.dir") + System.getProperty("file.separator") + "music" + System.getProperty("file.separator") + t.getArtist() + System.getProperty("file.separator") + importAlbum.getTitle() + System.getProperty("file.separator"));
    5. if(!(path.exists()))
    6. {
    7. path.mkdirs();
    8. }
    9. String cmd = "cmd /C start lame -m j -V 4 --vbr-new -b 128 -B 192 --tt \"" + t.getTitle() + "\" --ta \"" + t.getArtist() + "\" --tl \"" + importAlbum.getTitle() + "\" --ty \"" + t.getYear() + "\" --tn \"" + t.getTrackNo() + "\" --tg \"" + t.getGenre() + "\" \"" + System.getProperty("java.io.tmpdir") + "importedMusic" + System.getProperty("file.separator") + "track" + i + ".wav" + "\" \"" + System.getProperty("user.dir") + System.getProperty("file.separator") + "music" + System.getProperty("file.separator") + t.getArtist() + System.getProperty("file.separator") + importAlbum.getTitle() + System.getProperty("file.separator") + t.getTitle() + ".mp3\"";
    10. System.out.println(cmd);
    11. //pb = pb.command((cmd, null, new File("C:\\Program Files\\lame\\"));;
    12. ProcessBuilder builder = new ProcessBuilder(cmd);
    13. builder = builder.directory(new File(MediaLibrary.getInstance().getLamePath()));
    14. Process process = builder.start();
    15. i++;
    16. }
    Alles anzeigen


    mit "cmd /C" rufe ich ja cmd auf und sage das er nach Beenden das Programm schließen soll - ich glaub aber durch start lame wird die davorige Konsole geschlossen und somit hat waitFor() im alten Programm keine Wirkung auf das laufende lame.exe. Kann das sein?

    Wie kann ich das nun über Process Builder hinbiegen? Ich hätte gern das jedes mal die cmd aufgeht und das Programm ausgeführt werden soll und beim Beenden wieder zugehen soll.

    Wäre nett wenn mir da einer helfen könnte - hab schon viel im Internet gesucht und im Java ist auch eine Insel aber nicht wirklich was dazu gefunden was mir weiter hilft =/.