Java JSlider旋钮不是';t随着视频的发展而更新

Java JSlider旋钮不是';t随着视频的发展而更新,java,swing,slider,event-dispatch-thread,vlcj,Java,Swing,Slider,Event Dispatch Thread,Vlcj,这是我更新jslider的代码 try{ name=(String) jList1.getSelectedValue(); CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas1); mediaPlayer.setVideoSurface(videoSurface); mediaPlayer.setAdjustVideo(true);

这是我更新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();
    }
但它并没有改变nob的位置,事实上它一直在从头开始,从头开始。我认为原因是setTime()函数在jslider获得新值之前一直更新为0。有什么解决方案吗?可能使用线程?? 谢谢

使用此代码:

while(jSlider2.getValue() < jSlider2.getMaximum())
{
  jSlider2.setValue((int) this.mediaPlayer.getTime()/1000);
}
while(jSlider2.getValue()
您正在Swing事件调度线程或EDT上调用一个长时间运行的循环,这将冻结您的GUI,阻止所有绘制。考虑在SWIGWORKER DOIN后台方法中运行后台进程,然后通过SaveWaWork的发布/进程方法对更新GUI。另外,如果你要投票给媒体播放器,考虑放在<代码>线程中。在轮询循环中睡眠(/*数*//)/代码>,因为几乎连续地轮询是没有意义的。
有关这方面的更多信息,请查看。

我将在后台进程中搜索,并对其进行更改,希望它能起作用。非常感谢
while(jSlider2.getValue() < jSlider2.getMaximum())
{
  jSlider2.setValue((int) this.mediaPlayer.getTime()/1000);
}