starting vlc player in java

天大地大妈咪最大 提交于 2019-12-13 09:21:24

问题


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?


回答1:


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.




回答2:


  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();  
      }
    }
  }
}



回答3:


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.



回答4:


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);
    }


来源:https://stackoverflow.com/questions/1731299/starting-vlc-player-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!