2012-07-12 156 views
0

請看看下面的代碼VLCJ:更新進度條視頻進展

import com.sun.jna.Native; 
import uk.co.caprica.vlcj.binding.LibVlc; 
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent; 
import uk.co.caprica.vlcj.runtime.RuntimeUtil; 

import com.sun.jna.NativeLibrary; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.media.bean.playerbean.MediaPlayer; 
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter; 
import uk.co.caprica.vlcj.player.MediaPlayerEventListener; 

public class PlayMedia extends JFrame 
{ 
    private EmbeddedMediaPlayerComponent m; 
    private JProgressBar bar; 

    public PlayMedia() 
    { 

     NativeLibrary.addSearchPath(
     RuntimeUtil.getLibVlcLibraryName(), "c:\\program files\\videolan\\vlc" 
    ); 
    Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); 


     m = new EmbeddedMediaPlayerComponent(); 
     m.getMediaPlayer().addMediaPlayerEventListener(new UpdateBar()); 

     bar = new JProgressBar(0,100); 
     bar.setStringPainted(true); 

     getContentPane().add(m); 
     getContentPane().add(bar,"South"); 


     this.setSize(500,500); 
     this.validate(); 
     this.setLocationRelativeTo(null); 

     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


     m.getMediaPlayer().playMedia("C:\\Users\\Yohan\\Desktop\\video.avi"); 

    } 

    private class UpdateBar extends MediaPlayerEventAdapter 
    { 
     public void positionChanged(MediaPlayer mp, float pos) 
     { 
      int value = Math.min(100, Math.round(pos * 100.0f)); 
      bar.setValue(value); 
     } 
    } 

    public static void main(String[]args) 
    { 


      SwingUtilities.invokeLater(new Runnable() 
      { 
      @Override 
       public void run() 
       { 
        new PlayMedia(); 
       } 
      }); 


    } 
} 

在這裏,在播放視頻時正常,但進度條沒有得到更新。視頻播放時如何更新進度欄?請幫忙!

回答

0

我沒有在Swing中使用ProgressBars,但我已經在Silverlight中使用過它們,所以我認爲大部分原則都是一樣的。看看我的問題在這裏的答案: How do I make a Silverlight Progressbar update according to its value?它可能並沒有告訴你如何在Swing中做到這一點,但它似乎並不像你在代碼中使用線程,這是我的問題。

0

由於某些未知原因,在視頻期間不調用positionChanged()。 嘗試使用timeChanged()istead,它爲我工作!

public void positionChanged (MediaPlayer mediaPlayer , long time) { 



      }