Newsgroup: it.comp.java
Titolo: JProgressBar

Devo fare una copia di un file su HD, e voglio monitorare il tutto con una
JProgressBar.
Ho letto tutti gli esempi esistenti sul sito della sun e sul JBuilder ma non
funzionano, ed ecco perchè:
la mia idea è quella di prendere il file, dividerlo in 100 parti e, ogni
volta che faccio una lettura incrementare di uno il valore della JPB.
Il problema è che la grafica non si aggiorna, e quindi sembra che si impalli
tutto finch'è, alla fine, appare la JPB al 100%.
Come posso fare per far vedere che si incrementa pian piano?
Grazie,
   OrFeO

possibilmente sbagli qualcosa..
perche' gli esempi sul sito sono semplicissimi e funzionanti..
forse devi gestire meglio il thread


Come posso fare per far vedere che si incrementa pian piano?
Hai già valutato
javax.swing.ProgressMonitor
e
javax.swing.ProgressMonitorInputStream
?
HTH
-- 
Ciao
	Fabrizio C.

Si, ma i problemi nn sono assolutamente risolti.
Non posso fermare tutto tranne la JPB? Così facendo si ferma tutto tranne il
repaint della JPB, e appena ha finito faccio ripartire....
OrFeO
Fabrizio Camera <f.came...@Mtiscali.it> wrote in message
MPG.16df7fad5...@powernews.libero.it...


repaint della JPB, e appena ha finito faccio ripartire....
Cos'č il "tutto"?
Cosa finisce?
Cosa fai ripartire?
PS
Per cortesia, replica con Re:
-- 
Ciao
	Fabrizio C.

Ok, sorry.
Problema: faccio il backup di un file prendendone dei pezzettini in letture
e scrivendoli da un'altra parte.
Nel mezzo di questa operazione dovrei aggiornare la JProgressBar. Cosě:
for(....) {leggo dei dati.
               aumento il valore della JProgBar di 1.
              scrivo i dati che ho appena letto.
              }
Soltanto che il prog., essendo occupato a leggere e scrivere, non aggiorna
le swing.
Io vorrei che l'operazione 1 3 dessero tempo alla 2 do ridisegnare la JPB.
Ho provato a fare
Object sincro=new Object();
synchronized (sincro) {leggo}
synchronized (sincro) {aggiorno la JPB}
synchronized (sincro) {scrivo}
Ma nn va.
Ecco.
Grazie ancora,
  OrFeO
Fabrizio Camera <f.came...@Mtiscali.it> wrote in message
MPG.16e0c95ab...@powernews.libero.it...


Ma nn va.
Per fortuna...
Voglio ribadire due cose:
- postando (un po' di) codice, ci si capisce prima
- hai provato ad usare ProgressMonitorInputStream?
Prova se funziona:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Progressi {
  private JFrame frame;
  private JProgressBar pb;
  private JButton button;
  public Progressi() {
    frame = new JFrame("per OrFeO");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(320, 100);
    frame.setContentPane(buildGui());
    frame.setVisible(true);
  }
 
  private JPanel buildGui() {
    JPanel panel = new JPanel(new GridLayout(2, 1));
    pb = new JProgressBar(JProgressBar.HORIZONTAL);
    button = new JButton("Avvia la copia");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Thread t = new Thread() {
          public void run() {
            button.setEnabled(false);
            File src = new File("x.y");
            File dst = new File("Progressi.txt");
            pb.setMinimum(0);
            pb.setMaximum((int)src.length());
            pb.setStringPainted(true);
            try {
              FileInputStream in = new FileInputStream(src);
              FileOutputStream out = new FileOutputStream(dst);
              int num;
              byte[] b = new byte[100];
              while ((num = in.read(b)) != -1) {
                out.write(b, 0, num);
                pb.setValue(pb.getValue() + num);
                pb.setString((int)(pb.getPercentComplete() * 100) + 
" %");
                // per avere il tempo di vedere qualcosa con file 
brevi...
                //Thread.sleep(100);
              }
              out.close();
              in.close();
              pb.setValue(0);
              pb.setString("Fatto");
              button.setEnabled(true);
            } catch (Exception ex) {
              ex.printStackTrace();
            }
          }
        };
        t.start();
      }
    });
    panel.add(pb);
    panel.add(button);    
    return panel;
  }
 
  public static void main(String[] args) {
    new Progressi();


                 file://Thread.sleep(100);
