starting vlc player in java
I tried to start vlc player in Java, but somehow it did 开发者_高级运维not word. Any other Prog I tried worked. Plz have a look at my code:
try {
Runtime.getRuntime().exec("K:\\...\\vlc.exe");
} catch (Exception ex) {
System.out.println(ex);
}
Where is the problem starting videoLAN Player?
The fact remains, you have an error and you don't know what it is. I second the advice to properly connect up (at least!) the stderr
stream with a listening thread so you'll see the error message the program is throwing at you.
- Check if the path is valid (exists + is it a file)
- Use the more readable and portable path-notation which uses slashes
- You must read out the stderr and stdout streams of the started process else it will hang when the OS-specific bufffer for it is filled
Javacode:
import java.io.*;
public class Test {
public static void main(String args[]) {
new Test("K:/Programms/VideoLAN/VLC/vlc.exe");
}
public Test(String path) {
File f = new File(path);
if (!(f.exists()&&f.isFile())) {
System.out.println("Incorrect path or not a file");
return;
}
Runtime rt = Runtime.getRuntime();
try {
Process proc = rt.exec(path);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), false);
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), false);
errorGobbler.start();
outputGobbler.start();
System.out.println("\n"+proc.waitFor());
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
class StreamGobbler extends Thread {
InputStream is;
boolean discard;
StreamGobbler(InputStream is, boolean discard) {
this.is = is;
this.discard = discard;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
if(!discard)
System.out.println(line);
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
You need to check ensure various things.
- does that file exists (File.exists()). In particular that treble dot (...) looks wrong. (or is it an ellipsis and you've just removed the path for brevity ?)
- is it executable ?
- you need to capture stdout/stderr from the process concurrently, or you run the risk of the process blocking. More info with this answer.
Actually you made a mistake in your code,exec() method of Runtime class returns java.lang.Process so you should take a return type in your code so try this code...........
try {
process ps=Runtime.getRuntime().exec("K:\\...\\vlc.exe");
} catch (Exception ex) {
System.out.println(ex);
}
精彩评论