我想显示一个方法的进度情况
设置了一个JProgressBar
在简单的代码中可以实现
但是在复杂的代码,特别是方法本身就很麻烦的情况下,进度条是从0%一下子到100%,中间的过程都没有显示。
请高手指点一下,不胜感激。
设置了一个JProgressBar
在简单的代码中可以实现
但是在复杂的代码,特别是方法本身就很麻烦的情况下,进度条是从0%一下子到100%,中间的过程都没有显示。
请高手指点一下,不胜感激。
解决方案 »
- mysql高手们,指点下吧,mysql给一个表连接一个主键列!
- 数据查询问题???
- Error 1102 <42000>: Incorrect DB name
- mysql触发器的问题
- 请教一个SQL语句,如何查询一列中重复的值
- 如何要把一个byte[]数组存入postgresql中,以何种数据类型存入,又如何读出呢 求解
- 一个表有100万条记录,MYSQL行么?
- 有没有可以直接查看mysql表中数据的非Dos工具?!
- 为什么会出错:mysql="select * from Bbs_User where User_Name="& request.form("Name")谢谢!
- MySql修改my.ini配置文件后不能启动服务!配置文件恢复之前配置就能启动!为什么?求各位大神解答
- 请教一个存储过程
- 求教一个错误
之所以会出现这种情况,是因为JAVA的SWING组件的天性锁定的,SWING组件是线程资源共享的,你在一个复杂的代码执行过程中,所有的窗体和组件内部都共用一个画笔,如果你的主线程没有将代码执行完毕,将资源释放,资源就不会被JProgressBar这个组件取得,也就是说你的程序的窗口上的改变都共用了一个内部的画笔,你的JProgressBar要想改变进度必须取得画笔重画这个组件,然而此时画笔资源是被代码的占用的,也就是被主线程占用的,JProgressBar没有办法被重画,一直再等待画笔被释放,才能开始画。当你的代码执行计算完毕,将画笔释放后,JProgressBar就取得了画笔,一下子就是画到了100%。
要想解决这个问题,可以这样:创建一个共用变量,shareFlag,int类型的,代码执行过程中不断改变这个变量的值,你开辟一个新的子线程,这个线程同步的去读这个变量值,然后改变JProgressBar的状态为这个值就可以了。这样,资源,也就是画笔,就在主线程和子线程之间传递起来了。彼此交替使用,就可以达到你的要的效果了。
明白了吗?
SWING组件,所有的组件都是共享一套资源的,必须明白!