用JProgressBar做一个进度条,然后用TimeTask写了一个每个一秒就更新JProgressBar的任务,但是JProgressBar不是1秒更新一次,怎么回事。求解

解决方案 »

  1.   

    更新JProgressBar的代码要放到单独的线程里
      

  2.   

    我可以更新JProgressBar,但不是Timer.schedule()这个方法所设定的1秒更新一次,我看了下大概是5秒进度条才跳一次
      

  3.   

    使用多线程
    假设你的JProgressBar标量为progressBar..class  X implements Runnable{
      public X(){
      //....你的其他代码
       new Thread(this).start();
      }
      //...你的其他方法
      
      public void run(){
       while(true){
        long startTime = System.currentTimeMillis();
        //关于JProgressBar的操作即:更新JProgressBar
        long endTime = System.currentTimeMillis();
        if(endTime-startTime<1000){
          try{
            Thread.sleep(1000-(endTime-startTime));
         }catch(Exception e){
          }
        }
       }
      }
    }PS:代码为手动输入,格式问题请见谅。。
      

  4.   

    不好意思没看到要使用TimeTask...
    不过你也可以考虑不用TimeTask,而使用多线程。。
      

  5.   

    JProgressBar我使用了DefaultBoundedModel这个模型。sm.timer.schedule(new TimeSet(sm), 0, 1000);,这样我用了这个方法应该更用线程差不多,最后那个参数设置了1000毫秒运行TimeSet这个方法,而TimeSet我是继承了TimeTask,但是当程序运行时,进度条大概5秒才跳,不是我要的1秒跳一次,我想知道为什么,应该怎么改。
      

  6.   

    我已经发现JProgressBar更新的不是1秒的问题了,假如我没有改最大值就能1秒更新一次,改了最大值之后就不能1秒更新一次,请教高手该怎么办