2012-07-12 155 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) { 



      }