无限期地显示任务的进度

时间:2013-11-15 16:44:24

标签: java task progress jprogressbar

在这些情况下,我需要在进度条中显示方法ProcBaseCentral(jfSelectorArchivo.getSelectedFile())的进度。这个方法调用一个无限期完成的SQL查询。不确定模式适用于我,但我需要看到一些进展,因为显示进度非常重要。

我设法在代码中取得了很好的进展,我可以显示百分比,但仍然没有找到衡量进度的方法。进度条在方法或功能的同时没有完成,我知道我的代码是错误的,我只是没有找到衡量进度的方法。也许有人可以帮我算法。

下一个代码就是我到目前为止。

private void bProcesar3ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        final int N = 100;        
        bProcesar3.setEnabled(false);
        class MyWorker extends SwingWorker<Double, Double> {

            @Override
            public Double doInBackground() throws InterruptedException {
                setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                Thread t = new Thread(new Runnable() {
                    public void run() {
                        ProcesarSOC(jfSelectorArchivo.getSelectedFile());
                    }
                });
                int cntr = 1; //
                int cont = 0;
                double d1;
                double d2;
                double d3;
                t.start();
                while (t.isAlive()) {
                    d1 = N;
                    d2 = cont++;
                    d3 = d2 / d1;
                    d3 = d3 * 100;
                    if (d3 >= cntr) {
                        cntr++;
                        setProgress(cntr);
                        publish(Double.valueOf(cntr));                        
                    }
                }
                return Double.valueOf(0);
            }

            @Override
            protected void process(List<Double> chunks) {
                for (double d : chunks) {
                    System.out.println(": " + d);
                }
            }

            @Override
            public void done() {
                Toolkit.getDefaultToolkit().beep();
                setCursor(null);
            }
        }
        MyWorker task = new MyWorker();
        task.addPropertyChangeListener(new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent e) {
                if ("progress".equals(e.getPropertyName())) {
                    jProgressBar1.setIndeterminate(false);
                    jProgressBar1.setValue((Integer) e.getNewValue());
                    System.out.println("**: " + e.getNewValue());
                }
            }
        });
        task.execute();
    }

感谢您的时间。

0 个答案:

没有答案