在这些情况下,我需要在进度条中显示方法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();
}
感谢您的时间。