Java JSlider旋钮不是';t随着视频的发展而更新
这是我更新jslider的代码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);
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);
}