views:

442

answers:

4

Hey! 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?

A: 

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.
Brian Agnew
... is only my path. In my real project there is \\Programms\\VideoLAN\\VLC\\I don't think, I have to check weather the File exists or not, cause I will only start the Programm without any File.videoLAN Playe 1.0.x works! 0.9.x not...
tryit
+1  A: 

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.

Carl Smotricz
The correct steps to follow are available at http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 . See listing 4.5 for redirecting the out/err streams.
Thimmayya
A: 
  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();  
      }
    }
  }
}
jitter
A: 

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

Deepak