我想显示一个方法的进度情况
设置了一个JProgressBar
在简单的代码中可以实现
但是在复杂的代码,特别是方法本身就很麻烦的情况下,进度条是从0%一下子到100%,中间的过程都没有显示。
请高手指点一下,不胜感激。

解决方案 »

  1.   

    虽然是发错地方了,但是却问对人了:
    之所以会出现这种情况,是因为JAVA的SWING组件的天性锁定的,SWING组件是线程资源共享的,你在一个复杂的代码执行过程中,所有的窗体和组件内部都共用一个画笔,如果你的主线程没有将代码执行完毕,将资源释放,资源就不会被JProgressBar这个组件取得,也就是说你的程序的窗口上的改变都共用了一个内部的画笔,你的JProgressBar要想改变进度必须取得画笔重画这个组件,然而此时画笔资源是被代码的占用的,也就是被主线程占用的,JProgressBar没有办法被重画,一直再等待画笔被释放,才能开始画。当你的代码执行计算完毕,将画笔释放后,JProgressBar就取得了画笔,一下子就是画到了100%。
    要想解决这个问题,可以这样:创建一个共用变量,shareFlag,int类型的,代码执行过程中不断改变这个变量的值,你开辟一个新的子线程,这个线程同步的去读这个变量值,然后改变JProgressBar的状态为这个值就可以了。这样,资源,也就是画笔,就在主线程和子线程之间传递起来了。彼此交替使用,就可以达到你的要的效果了。
    明白了吗?
    SWING组件,所有的组件都是共享一套资源的,必须明白!