JProgressBar 进度显示问题 我想显示一个方法的进度情况设置了一个JProgressBar在简单的代码中可以实现但是在复杂的代码,特别是方法本身就很麻烦的情况下,进度条是从0%一下子到100%,中间的过程都没有显示。请高手指点一下,不胜感激。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 虽然是发错地方了,但是却问对人了:之所以会出现这种情况,是因为JAVA的SWING组件的天性锁定的,SWING组件是线程资源共享的,你在一个复杂的代码执行过程中,所有的窗体和组件内部都共用一个画笔,如果你的主线程没有将代码执行完毕,将资源释放,资源就不会被JProgressBar这个组件取得,也就是说你的程序的窗口上的改变都共用了一个内部的画笔,你的JProgressBar要想改变进度必须取得画笔重画这个组件,然而此时画笔资源是被代码的占用的,也就是被主线程占用的,JProgressBar没有办法被重画,一直再等待画笔被释放,才能开始画。当你的代码执行计算完毕,将画笔释放后,JProgressBar就取得了画笔,一下子就是画到了100%。要想解决这个问题,可以这样:创建一个共用变量,shareFlag,int类型的,代码执行过程中不断改变这个变量的值,你开辟一个新的子线程,这个线程同步的去读这个变量值,然后改变JProgressBar的状态为这个值就可以了。这样,资源,也就是画笔,就在主线程和子线程之间传递起来了。彼此交替使用,就可以达到你的要的效果了。明白了吗?SWING组件,所有的组件都是共享一套资源的,必须明白! 大虾们!你们刚开始都是怎么学习Mysql的? mysql在同一表中如何比对数据 if then else的问题 装了一晚上msyql都没装好,郁闷死了 在Linux上备份的PostgreSQL文件,不能在windows里恢复吗? 查询出来的两条记录,如何拼接相同的字段的内容 如何使用mysql实现插入数据时为该条数据生成一个随即不重复的ID(不使用自增)? 请问如何在mysql-4.0.20中设置和修改root的密码,以及如何新建用户和分配用户权限... 求助!!我的MYSQL缺少程序! 求助mysql索引无效了,求指点 请教一个存储过程 求教一个错误
之所以会出现这种情况,是因为JAVA的SWING组件的天性锁定的,SWING组件是线程资源共享的,你在一个复杂的代码执行过程中,所有的窗体和组件内部都共用一个画笔,如果你的主线程没有将代码执行完毕,将资源释放,资源就不会被JProgressBar这个组件取得,也就是说你的程序的窗口上的改变都共用了一个内部的画笔,你的JProgressBar要想改变进度必须取得画笔重画这个组件,然而此时画笔资源是被代码的占用的,也就是被主线程占用的,JProgressBar没有办法被重画,一直再等待画笔被释放,才能开始画。当你的代码执行计算完毕,将画笔释放后,JProgressBar就取得了画笔,一下子就是画到了100%。
要想解决这个问题,可以这样:创建一个共用变量,shareFlag,int类型的,代码执行过程中不断改变这个变量的值,你开辟一个新的子线程,这个线程同步的去读这个变量值,然后改变JProgressBar的状态为这个值就可以了。这样,资源,也就是画笔,就在主线程和子线程之间传递起来了。彼此交替使用,就可以达到你的要的效果了。
明白了吗?
SWING组件,所有的组件都是共享一套资源的,必须明白!