2016-08-08 16 views
1

pause()方法はMediaビットを「追求」を作ります。 これは本当に面倒ですが、どこに問題があるのか​​分かりませんでした。JavaFX Media - pause();メソッドはMediaPlayerを早送りにしますか? <code>MediaPlayer</code>の

private void playPauseClicked() 
    {  
     Status currentStatus = player.getStatus(); 
     if(currentStatus == Status.PLAYING) 
     { 
      Duration d1 = player.getCurrentTime(); //To measure the difference 
      player.pause(); 
      Duration d2 = player.getCurrentTime(); 
      VIDEO_PAUSED = true; 
     } 
     else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED) 
     { 
      player.play(); 
      VIDEO_PAUSED = false; 
     } 
    } 

結果は明確ではありません。スポットd1とd2の間に約200〜400msの差があります。私はメディアを一時停止した後に戻ってD1に私のプレーヤーを追求しようとしたもちろん

は、メディアを再開した後、同じ結果を動作しませんでした。何かアドバイスを事前に

感謝:)

答えて

0

pause方法は、(pauseが呼び出されたときに、メディアがまだ再生したときにstatusProperty変化の瞬間に正確に停止します)瞬時に再生を停止しないので、それはです:

プレーヤーを一時停止します

プレーヤーが実際に一時停止すると、ステータスは にMediaPlayer.Status.PAUSEDに設定されます。

はあなたが一時停止する前に、現在の時刻Duration d1 = player.getCurrentTime();を取得するときに、再生が実際に一時停止されていないため、そのための測定は、実際には関係ありません、あなたはDuration d2 = player.getCurrentTime();pauseの呼び出し後に現在時刻を取得するときにもありません

のMediaPlayerの操作は、本質的に非同期です:pauseが非同期で実行されているように正しい、それゆえd2でビデオの再生を停止して何garantieはありません。

再生停止時の正確な時刻を得るためにできることは、たとえばMediaPlayerのステータスの変化を観察することです。 setOnPaused

例:

private void playPauseClicked() { 
    Status currentStatus = player.getStatus(); 

    if(currentStatus == Status.PLAYING) 
     player.pause(); 
    else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED) { 
     System.out.println("Player will start at: " + player.getCurrentTime()); 
     player.play(); 
    } 
} 

player.setOnPaused(() -> System.out.println("Paused at: " + player.getCurrentTime())); 

出力例:

Paused at: 1071.0203000000001 ms 
Player will start at: 1071.0203000000001 ms 
Paused at: 2716.7345 ms 
Player will start at: 2716.7345 ms 

注:あなただけしたい場合場合にMediaPlayerの時間を設定する必要はありませんが停止して再生するが、あなたがしたい場合はseekメソッドを使用することができます。

+0

うわー、素晴らしい!私はビデオをたくさん見て、これを行う方法を見つけるために読んで... ありがとうたくさん!あなたの助けに感謝。 – Rouman

関連する問題