JAVA 利用JLabel 循环地设置图片,以实现图片播放,但是没有播放而是等程序运行结束后显示最后一张


如代码所示,我对同一张图进行放大和缩小,先不断放大图片,然后不断缩小图片,在此过程中不断利用JLabel的setIcon去更新放大或者缩小后的结果。但是运行后程序卡着直到该过程结束才显示最后一张图片,播放效果也没有了。小弟不才,求大神们解答为何?我的imageShow是一个JLabel对象,setIcon已经在scale函数里面实现了。

9 个解决方案

#1


这应该不是java代码的问题吧,应该是前台的问题

#2


在线等!!up

#3


回复1楼:
前台问题指什么呢

#4


引用 1 楼 qq_18994831 的回复:
这应该不是java代码的问题吧,应该是前台的问题

前台问题指什么呢?

#5


js之类的,后台数据变化不会影响一个页面,所以要用js来实时刷新局部

#6


因为这段代码是在UI线程里执行的,线程被阻塞,导致界面不能刷新,new 一个新线程执行这段代码

#7


在setIcon之后加上paintComponents(getGraphics())刷新就可以了。还是感谢大家的回复

#8


引用 6 楼 wcs1989 的回复:
因为这段代码是在UI线程里执行的,线程被阻塞,导致界面不能刷新


正解

引用 6 楼 wcs1989 的回复:
new 一个新线程执行这段代码


这个不对,至少没说清楚,楼主可以自己搜一下关于swing线程规则的知识

引用 7 楼 zkp0601 的回复:
在setIcon之后加上paintComponents(getGraphics())刷新就可以了。还是感谢大家的回复


楼主自己发现的这方法不对
按你这方法,在图片刷新期间你整个程序的其他所有控件会像死机一样木有反应

#9


回答楼主最初的问题: 方法有很多种,要注意线程安全。

- 可以用第三方的动画库(推荐)
- 可以用 javax.swing.Timer 来代替 for 循环(Timer 就相当于最精简的一个动画库)
- 可以像 6 楼说的一样用线程,Runnable 里写 for 循环,但是 setIcon 的调用要在UI线程内完成,去查 SwingUtilities.invokeLater
- 可以用 SwingWorker,与线程的方案相仿
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告