2017-04-20 3 views
0

私のためにビデオを再生し、ビデオが終了したときに戻る機能で、以前は戻っていない機能が必要です。だから、私が "play( 'video1'); play( 'video2');両方のビデオを連続して再生する必要があります。私はこれを行ういくつかの試みを行ったが、これまでのすべての試みは、ビデオを再生したり、すべてのビデオを同時に再生したりしない。以下は、ビデオを再生するための基本的な機能を掲載しましたが、今はリターンを遅らせる方法が必要です。何か案は?メディアの再生が終了するまで戻りません。

private static void play(String name) throws InterruptedException { 
    Media media = new Media(uri(name)); 
    MediaPlayer player = new MediaPlayer(media); 
    player.setAutoPlay(true); 
    view.setMediaPlayer(player); 
} 

Iは、以下を試してみました:関数の終了時に無限ループと組み合わせて

player.setOnEndOfMedia(() -> { return; }); 

。何らかの理由で、ビデオが再生されないようにします。どんな良いアイデアですか?

答えて

1

JavaFXは、すべてのUIツールキットと同様に、イベント駆動です。これは、あなたが望むすべてを行う大きなループを書くのではなく、イベントに応答するコードを書くことを意味します。 (FXアプリケーションスレッドからメディアプレーヤーを起動していて、メディアが終了するまでメソッドが終了しなかった場合、UIは更新されず、ユーザーイベントに応答できません。あなたが起こるしたいもの)

だから、あなたがプレーするために別のものがある場合は、次のメディアを再生するためにonEndOfMediaハンドラを使用する必要があります。

private String[] videos = {"video1", "video2"}; 
private int currentVideoIndex = 0 ; 

private void playNextVideo() { 
    Media media = new Media(uri(videos[currentVideoIndex])); 
    currentVideoIndex++ ; 
    MediaPlayer player = new MediaPlayer(media); 
    player.setOnEndOfMedia(() -> { 
     if (currentVideoIndex < videos.length) { 
      playNextVideo(); 
     } 
    }); 
    player.setAutoPlay(true); 
    view.setMediaPlayer(player); 
} 
+0

こんにちはジェームズ、あなたの迅速な対応をありがとうございましたjavafxがイベント駆動型であるという考えは本当に助けになりました。私はあなたの機能を使用しており、それは素晴らしい仕事です。私は2つのビデオの間に短い白いちらつきを防ぐ良い方法があるかどうか疑問に思っています。 (私のビデオの開始と終了はおおよそ同じ画面上にあるので、ビデオのフレームをシーンの背景として設定することを考えていました。この効果を得るにはより良い方法がありますか?) – Joan

+0

@Joanわかりません:それを試してみて、手にするのに適したビデオファイルを持っていない。メディアがディスク(またはどこからでも)から読み込まれている間、しかし 'view.setMediaPlayer(...) 'の呼び出しが完了した後、短時間のうちに"フリッカー "が起こっていると思われます。おそらく次の 'Media'オブジェクト(または' MediaPlayer'オブジェクト)を1つ先のビデオをロードして読み込むことによって、「次のビデオを前もってキューに入れる」のようなことをすることができます。しかし、コードは複雑になるかもしれません。 –

関連する問題