# Runtime.exec() VLC starten klappt nicht



## 0001001 (7. Mrz 2009)

Hallo,

hab ein verzwicktes Problem und hoffe jemand von euch bringt mich auf die richtige Idee.

Ich möchte den VLC Videoplayer über eine GUI mit Runtime.getRuntime().exec() starten und eine MP3 Datei als Paramter übergeben.

*Problem ist, dass es mit dem VLC 0.8.x einwandfrei funktioniert, mit dem neuen VLC 0.9.x aber nicht!*
Der neue VLC öffnet sich erst, wenn ich das Java Fenster schließe.

Hier ein Demobeispiel (Pfad zum VLC und zur Datei müssen evtl. angepasst werden):

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class VLC{
	private Process vlcprocess;

	public String path = "C:\\Programme\\VideoLAN\\VLC\\vlc.exe";
	public String file = "c:\\song1.mp3";
	
	public VLC(){
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton button = new JButton("start");
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				stream(file);
			}
		});
		frame.add(button);		
		frame.pack();
		frame.setSize(500, 300);
		frame.setVisible(true);
	}
	
	public static void main(String[] argv){
		SwingUtilities.invokeLater(new Runnable(){
			public void run(){
				new VLC();
			}
		});		
	}
	
	public void stream(String channel){
		String cmd = path+" "+channel ;
		System.out.println("starte vlc mit: "+cmd);
		try {
			vlcprocess = Runtime.getRuntime().exec(cmd);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
```

Vielen Dank schon mal für eure Hilfe!

Hier wurde das gleiche Problem beobachtet:
The VideoLAN Forums &bull; View topic - 0.9.* breaks java command line launching


----------



## Loki (7. Mrz 2009)

Bei mir klappt, startet aber erst nach der Beendigung des Programms.


----------



## 0001001 (7. Mrz 2009)

Loki hat gesagt.:


> Bei mir klappt, startet aber erst nach der Beendigung des Programms.


Exakt das Problem hab ich auch.

Die Frage ist nun: Woran liegt das?


----------



## Wolfgang Lenhard (7. Mrz 2009)

Hi,
ich habe jetzt nicht die exakte Lösung für Dein Problem, dachte mir aber, dass das DJ-Projekt für Dich interessant sein könnte, speziell wenn es um die Einbindung von VLC auf Windows geht: http://djproject.sourceforge.net/ns/screenshots/images/VLCPlayer.png

Ciao,
  Wolfgang


----------



## 0001001 (7. Mrz 2009)

Hallo Wolfgang,

danke für den Hinweis. Leider bringt mir das in meinem Projekt nichts, da ich den VLC nicht in eine Java Anwendung einbinden will.


Suche also immer noch die Lösung für mein Problem!


----------



## Wolfgang Lenhard (7. Mrz 2009)

Muss es speziell VLC sein, oder reicht es, das MP3 mit einem beliebigen Programm wiederzugeben? In diesem Fall wäre beispielsweise Desktop.open() eine Möglichkeit (ab 6.0, Downports auf 5.0 verfügbar).


----------



## musiKk (7. Mrz 2009)

Siehe hier. Die Korrektur, die an meinem dortigen Beitrag vorgenommen wurde, muss natürlich auch beachtet werden.


----------



## 0001001 (7. Mrz 2009)

musiKk hat gesagt.:


> Siehe hier. Die Korrektur, die an meinem dortigen Beitrag vorgenommen wurde, muss natürlich auch beachtet werden.



Hm,
verstehe nicht was das mit meinem Problem zu tun hat, der Autor dort hat ja Probleme mit den Hochkommata. Vielleicht verstehe ich dich auch nur einfach falsch :-/


----------



## 0001001 (7. Mrz 2009)

Ok,

konnte das Problem lösen. Es liegt daran dass der VLC 0.9.x auf den InputStream schreibt. So lange das nicht abgeholt wird, startet die VLC GUI nicht.

Also per process.getInputStream() den Stream holen und dann am besten in nem eigenen Thread den Inhalt abholen. Wie das geht wird hier erklärt:
When Runtime.exec() won't - JavaWorld


----------



## musiKk (7. Mrz 2009)

Stimmt, dachte nur, daran könnts trotzdem liegen. Aber da du kein Leerzeichen oder sonstige Sonderzeichen im Pfad der Datei hast... Dennoch habe ichs mal ganz simpel ohne InputStream abholen ausprobiert und mit VLC 0.9.2 hats geklappt.

```
String vlcPath = "d:/vlc-0.9.2/vlc.exe";
String file = "e:/video.avi";

//Runtime.getRuntime().exec(vlcPath + " " + file);
// oder:
Runtime.getRuntime().exec(new String[] { vlcPath, file});
```
Laut dem Forenbeitrag sollte es mit 0.9.2 ja schon nicht mehr gehen. Aber das Wichtigste ist ja, dass es nun bei dir funktioniert.


----------

