如何在java中显示工作但虚拟的进度条

时间:2010-11-04 06:12:55

标签: java progress-bar

我想在我的java程序中显示一个进度条,但我不希望它实际上在一个真正的任务上工作,但我希望它只显示某个进程正在完成并且看起来好像某个进程正在进行。我尝试使用以下代码执行此操作,但它没有帮助我,所以,如果您可以帮助....

代码:

       try 
       {
           for(int i=0;i<=100;i++){
              prog.setValue(i); // this would set the progressbar
             Thread.sleep(300); // this should pause the program or the loop
           }
       }

       catch(Exception e){

       }

3 个答案:

答案 0 :(得分:3)

假设挥杆......

将进度条置于不确定模式
不确定模式下的进度条显示动画以指示正在进行工作

http://download.oracle.com/javase/tutorial/uiswing/components/progress.html#indeterminate

答案 1 :(得分:1)

以下示例显示了从0到100的进度条。使用SwingUtilities.invokeLaterSwingUtilities.invokeAndWait更新事件派发线程上的进度条非常重要。

public static void main(String[] args){
        JFrame f = new JFrame();
        f.setLayout(new BorderLayout());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JProgressBar bar = new JProgressBar(0,100);
        f.add(bar, BorderLayout.SOUTH);
        f.setSize(64, 64);
        f.pack();
        f.setVisible(true);

        for(int i = bar.getMinimum(); i <= bar.getMaximum(); i++){
            final int percent = i ;
            SwingUtilities.invokeLater(new Runnable(){
                @Override
                public void run() {
                    bar.setValue(percent);
                }
            });
            try {
                Thread.sleep(25);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
}

答案 2 :(得分:1)

int progressCounter=0;

    new Thread(new Runnable() {
        public void run() {
            while (progressCounter <= 100) {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        jProgressBar1.setValue(jProgressBar1.getValue()+1);
                        System.err.println("hello");
                    }
                });
                try { Thread.sleep(500); } catch (InterruptedException e) {}
            }
        }
    }).start();

试试这个,一定会有用。在java中,使用EDT更新组件,invokeLater(Runnable)用于在块中的每个其他任务完成时调用任务。