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

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

...全文
317 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
O_森_O 2015-01-28
  • 打赏
  • 举报
回复
因为这段代码是在UI线程里执行的,线程被阻塞,导致界面不能刷新,new 一个新线程执行这段代码
raistlic 2015-01-28
  • 打赏
  • 举报
回复
回答楼主最初的问题: 方法有很多种,要注意线程安全。 - 可以用第三方的动画库(推荐) - 可以用 javax.swing.Timer 来代替 for 循环(Timer 就相当于最精简的一个动画库) - 可以像 6 楼说的一样用线程,Runnable 里写 for 循环,但是 setIcon 的调用要在UI线程内完成,去查 SwingUtilities.invokeLater - 可以用 SwingWorker,与线程的方案相仿
raistlic 2015-01-28
  • 打赏
  • 举报
回复
引用 6 楼 wcs1989 的回复:
因为这段代码是在UI线程里执行的,线程被阻塞,导致界面不能刷新
正解
引用 6 楼 wcs1989 的回复:
new 一个新线程执行这段代码
这个不对,至少没说清楚,楼主可以自己搜一下关于swing线程规则的知识
引用 7 楼 zkp0601 的回复:
在setIcon之后加上paintComponents(getGraphics())刷新就可以了。还是感谢大家的回复
楼主自己发现的这方法不对 按你这方法,在图片刷新期间你整个程序的其他所有控件会像死机一样木有反应
卡帕kalper 2015-01-28
  • 打赏
  • 举报
回复
在setIcon之后加上paintComponents(getGraphics())刷新就可以了。还是感谢大家的回复
master_y 2015-01-27
  • 打赏
  • 举报
回复
js之类的,后台数据变化不会影响一个页面,所以要用js来实时刷新局部
卡帕kalper 2015-01-27
  • 打赏
  • 举报
回复
引用 1 楼 qq_18994831 的回复:
这应该不是java代码的问题吧,应该是前台的问题
前台问题指什么呢?
卡帕kalper 2015-01-27
  • 打赏
  • 举报
回复
回复1楼: 前台问题指什么呢
卡帕kalper 2015-01-27
  • 打赏
  • 举报
回复
在线等!!up
master_y 2015-01-27
  • 打赏
  • 举报
回复
这应该不是java代码的问题吧,应该是前台的问题

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧