You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Sunday, July 24th 2011, 12:44pm

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.

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int i = 0;
				for(Track t : trackList)
				{
					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"));
					if(!(path.exists()))
					{
						path.mkdirs();
					}
 
					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\"";
 
					System.out.println(cmd);
					//pb = pb.command((cmd, null, new File("C:\\Program Files\\lame\\"));;
					ProcessBuilder builder = new ProcessBuilder(cmd);
					builder = builder.directory(new File(MediaLibrary.getInstance().getLamePath()));
					Process process = builder.start();
					i++;
				}


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 =/.

Social bookmarks