-2

Javaでvlcプレーヤーを起動しようとしましたが、どういうわけか言葉になりませんでした。私が試した他のProgはすべて機能しました。Plzは私のコードを見てください:

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

videoLAN Playerの起動の問題はどこにありますか?

4

4 に答える 4

1
  1. パスが有効かどうかを確認します (存在 + ファイルかどうか)。
  2. スラッシュを使用する、より読みやすく移植性の高いパス表記を使用する
  3. 開始されたプロセスの stderr および stdout ストリームを読み取る必要があります。そうしないと、OS 固有のバッファがいっぱいになったときにハングします。

Java コード:

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();  
      }
    }
  }
}
于 2009-11-14T11:12:40.410 に答える
1

エラーがあり、それが何であるかわからないという事実は残ります。プログラムがスローしているエラー メッセージが表示されるように、(少なくとも!)stderrストリームをリッスン スレッドに適切に接続するようにアドバイスします。

于 2009-11-13T19:36:47.247 に答える
0

いろいろ確認する必要があります。

  1. そのファイルは存在しますか(File.exists())。特に、トレブル ドット (...) は間違っているように見えます。(または省略記号で、簡潔にするためにパスを削除しただけですか?)
  2. 実行可能ですか?
  3. 同時にプロセスから stdout/stderr をキャプチャする必要があります。そうしないと、プロセスがブロックされるリスクがあります。詳細については、この回答を参照してください。
于 2009-11-13T19:25:03.607 に答える
0

実際、あなたはコードを間違えました.Runtimeクラスのexec()メソッドはjava.lang.Processを返すので、コードで戻り値の型を取る必要があるので、このコードを試してください.....

 try {
        process ps=Runtime.getRuntime().exec("K:\\...\\vlc.exe");
    } catch (Exception ex) {
        System.out.println(ex);
    }
于 2010-10-11T21:08:19.987 に答える