【问题标题】:JSlider knob isn't updating as video progressesJSlider 旋钮没有随着视频的进行而更新
【发布时间】:2013-07-07 11:42:45
【问题描述】:

这是我更新 jslider 的代码

    try{
    name=(String) jList1.getSelectedValue();
    CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas1);
    mediaPlayer.setVideoSurface(videoSurface);
    mediaPlayer.setAdjustVideo(true);        
    mediaPlayer.playMedia(name+".mp4");
    mediaPlayer.setVolume(jSlider1.getMinimum());
    mediaPlayer.parseMedia();
    time = (int)(mediaPlayer.getMediaMeta().getLength()/1000);
    jSlider2.setMaximum(time);
    while(jSlider2.getValue()<jSlider2.getMaximum())
    {
      jSlider2.setValue((int) this.mediaPlayer.getTime()/1000);
     }
    }
    catch(Exception e)
    {
     e.printStackTrace();
    }

对于改变滑块状态的代码

 private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt)
 {                                      
 mediaPlayer.setTime((long) this.jSlider2.getValue());
}                                     

但它不会改变 nob 的位置,事实上它会再次从头开始播放。我认为原因是 setTime() 函数在 jslider 可以获取新值之前不断更新为 0。有什么解决方案吗??也许使用线程?? 谢谢!!

【问题讨论】:

    标签: java swing slider event-dispatch-thread vlcj


    【解决方案1】:

    使用此代码:

    while(jSlider2.getValue() < jSlider2.getMaximum())
    {
      jSlider2.setValue((int) this.mediaPlayer.getTime()/1000);
    }
    

    你在 Swing Event Dispatch T线程或 EDT 上调用一个长时间运行的循环,这将冻结你的GUI 阻止所有绘画。考虑在 SwingWorker 的 doInBackground 方法中运行您的后台进程,然后通过 SwingWorker 的发布/进程方法对更新 GUI。此外,如果您要轮询媒体播放器,请考虑在轮询循环中添加 Thread.sleep(/* some number */),因为几乎连续轮询是没有意义的。

    有关更多信息,请查看Concurrency in Swing

    【讨论】:

    • 我将搜索后台进程,并更改它,希望它会工作。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多