开发者

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.


  1. Check if the path is valid (exists + is it a file)
  2. Use the more readable and portable path-notation which uses slashes
  3. 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.

  1. 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 ?)
  2. is it executable ?
  3. 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);
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜