начиная VLC игрок в Java - PullRequest
       19

начиная VLC игрок в Java

0 голосов
/ 13 ноября 2009

Я пытался запустить vlc player на Java, но как-то так и не сказал. Любая другая прога, которую я пробовал, работала. Пожалуйста, посмотрите на мой код:

 try {
        Runtime.getRuntime().exec("K:\\...\\vlc.exe");
    } catch (Exception ex) {
        System.out.println(ex);
    }

Где проблема с запуском VideoLAN Player?

Ответы [ 4 ]

1 голос
/ 13 ноября 2009

Факт остается фактом, у вас есть ошибка, и вы не знаете, что это такое. Я рекомендую правильно соединить (по крайней мере!) Поток stderr с потоком прослушивания, чтобы вы увидели сообщение об ошибке, которое программа выдает вам.

1 голос
/ 14 ноября 2009
  1. Проверка правильности пути (существует + это файл)
  2. Используйте более читаемую и переносимую запись пути, которая использует косую черту
  3. Вы должны прочитать потоки stderr и stdout запущенного процесса, иначе он будет зависать при заполнении буфера для ОС

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();  
      }
    }
  }
}
0 голосов
/ 12 октября 2010

На самом деле вы допустили ошибку в своем коде, метод exec () класса Runtime возвращает java.lang.Process, поэтому вы должны принять возвращаемый тип в вашем коде, поэтому попробуйте этот код ...........

 try {
        process ps=Runtime.getRuntime().exec("K:\\...\\vlc.exe");
    } catch (Exception ex) {
        System.out.println(ex);
    }
0 голосов
/ 13 ноября 2009

Вам нужно проверить, чтобы убедиться, различные вещи.

  1. существует ли этот файл ( File.exists () ). В частности, эта тройная точка (...) выглядит неправильно. (или это многоточие, и вы только что удалили путь для краткости?)
  2. это исполняемый файл?
  3. вам нужно захватить stdout / stderr из процесса одновременно , иначе вы рискуете заблокировать процесс. Больше информации с этим ответом .
...