JProgressBar在阅读过程中不可见

时间:2019-04-09 13:02:04

标签: java swing

我有一个Java进度条,可以完美加载,但是我看不到进程,只能看到结果。 (当酒吧完成装载时) 我想查看进度的每个百分比。当我运行代码时,仅当框架处于100%位置时,框架才会出现,但进度栏不会。问题出在哪里?

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         

       JFrame f = new JFrame("JProgressBar Sample");
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       Container content = f.getContentPane();
       progressBar = new JProgressBar();
       progressBar.setStringPainted(true);
       Border border = BorderFactory.createTitledBorder("Reading...");
       progressBar.setBorder(border);
       content.add(progressBar, BorderLayout.CENTER);
       f.setSize(300, 100);
       f.setVisible(true);

       progressBar.setValue(0);
       inc(); //fill the bar
       //It fills, but I can't se the whole loading...

    }                                        
        //Here's the filling path
    public static void inc(){

        int i=0;
       try{
            while (i<=100){    
            progressBar.setValue(i+10);

            Thread.sleep(1000);
            i+=20;
            }
        }catch(Exception ex){
            //nothing
        }
    }

1 个答案:

答案 0 :(得分:0)

在GUI线程中运行很长的过程(例如填充进度栏和休眠几秒钟)时,您的GUI不会更新。

只需出现一个线程即可处理长时间的操作。 在此线程中,将进度条设置为SwingUtilities.invokeLater(new Runnable() {...}内的所需值。

Runnable r = new Runnable() {
    public void run() {
        int i=0;
        try{
            while (i<=100){    
                final int tmpI = i+10;
                SwingUtilities.invokeLater(new Runnable(){ 
                    public void run() {
                        progressBar.setValue(tmpI);
                    }
                });
                Thread.sleep(1000);
                i += 20;
            }
        } catch(Exception ex){
             //nothing
        }
    }
};
Thread t = new Thread(r);
t.start();