找出debug出错的地方,贴出出错信息,这样你我都方便!代码太长,看得头疼!呵呵!

解决方案 »

  1.   

    由于Swing不是线程安全的,所以Swing组件必须从事件派发线程中更新。并且,耗时的活动不应当从事件派发线程中完成,因为在耗时活动完成之前不会处理其他事件。
    所以,如果你在第二个程序中的下面的方法中添加System.out.println(i);便会发现:
    直到i变成100Swing组件才会改变。
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
            // Add your handling code here:
            try {
                jProgressBar1.setMaximum(100);
                for(int i=0;i<100;i++) {
                    Thread.sleep(50);
                    System.out.println(i);//这是添加的语句。
                    jProgressBar1.setValue(jProgressBar1.getValue()+1);
                } 
            } 
    也就是说,你必须像第一个例子那样,用线程控制JProgressBar,可参考《java2图形设计,卷2》
      

  2.   

    可以解决第2段代码的问题:
    只需要在方法 jButton1MouseClicked()内的 setValue() 之后加入一句:
    jProgressBar1.paint(jProgressBar1.getGraphics());
       private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
            // Add your handling code here:
            try {
                jProgressBar1.setMaximum(100);
                for(int i=0;i<100;i++) {
                   Thread.sleep(50);
                   jProgressBar1.setValue(jProgressBar1.getValue()+1);
                   jProgressBar1.paint(jProgressBar1.getGraphics());// add 
                                               
                } 
            } 
            catch (InterruptedException e) {
            }
        }
      

  3.   

    我把你的程序放在jbuilder8中运行了一下,
    两个效果是一样的啊,都可以正常运行的
    没见到什么错误信息
      

  4.   

    非常感谢stonecsdn(东东) 与 kinzey34(无声之舞) 的热心帮助。
    问题得到解决,对stonecsdn(东东)所说的还是有些不清楚,私下再去找这本《java2图形设计,卷2》看了之后再请指教。
    不知道kinzey34(无声之舞) 所说的方法是否常用或者是被提倡使用?
    实际开发中是否还是应该采用第一种方法?
    请各位再指教一二。
      

  5.   

    是啊!由于Swing不是线程安全的,所以Swing组件必须从事件派发线程中更新.但kinzey34(无声之舞)的程序里没有啊!
      

  6.   

    kinzey34(无声之舞)的程序使进度条重绘,使之能正常显示