Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 Cultura Informatica
 Corso di java
 Help ProgressMonitor

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
GiganteBaba Inserito il - 31/08/2007 : 20:59:00
Allora cerco di spiegare il mio problema. Io sto inviando un file e
voglio che esca una barra per far capire all'utente a che stato è l'upload. Allora ho deciso di utilizzare la classe ProgressMonitor.
Il problema è che quando avvio l'upload mi esce solo il contorno della finestra del ProgressMonitor con l'interno vuoto. E rimane così fino a quando non finisce l'upload e si chiude.

L'oggetto l'ho costruito in questo modo:
ProgessMonitor progressMonitor = new ProgressMonitor( null, "Upload in corso", "", 0,(int) file.length() );

poi setto lo stato iniziale:
progressMonitor.setProgress(0);

e aggiorno lo stato nel ciclo nel quale invio il file:
...
int letti = in.read(buffer);
if( letti>0 ) {
out.write( buffer,0,letti );
totale += letti;

progressMonitor.setProgress((int)totale);
} else {
...

Sto dimenticando qualcosa??? help me pls... google nn mi dà risposte tranne il solito esempio..
5   U L T I M E    R I S P O S T E    (in alto le più recenti)
GiganteBaba Inserito il - 02/09/2007 : 16:37:55
Ti ringrazio, domani pome dopo l'esame provo.
Lamia Inserito il - 02/09/2007 : 12:03:10
si..non ho pensato a specificarlo cmq la classe genitore dev'essere una classe che rappresenti una tua finestra...per esempio una classe che estende JFrame va bene.

cmq nei link che seguono è spiegato bene come fare:
http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html
http://java.sun.com/docs/books/tutorial/uiswing/examples/components/ProgressBarDemoProject/src/components/ProgressBarDemo.java

praticamente non hai usato l'oggetto di tipo Task a cui è necessario aggiungere dei listener tipo così:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.beans.*;
import java.util.Random;

public class ProgressBarDemo extends JPanel
implements ActionListener,
PropertyChangeListener {

private JProgressBar progressBar;
private JButton startButton;
private JTextArea taskOutput;
private Task task;

class Task extends SwingWorker<Void, Void> {
/*
* Main task. Executed in background thread.
*/
@Override
public Void doInBackground() {
Random random = new Random();
int progress = 0;
//Initialize progress property.
setProgress(0);
while (progress < 100) {
//Sleep for up to one second.
try {
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException ignore) {}
//Make random progress.
int letti = in.read(buffer);
if( letti>0 ) {
out.write( buffer,0,letti );
totale += letti;
}
setProgress((int)totale); //non so 'totale' dove l'hai istanziato ovviamente...cmq + o - è così

}
return null;
}

/*
* Executed in event dispatching thread
*/
@Override
public void done() {
Toolkit.getDefaultToolkit().beep();
startButton.setEnabled(true);
setCursor(null); //turn off the wait cursor
taskOutput.append("Done!\n");
}
}

public ProgressBarDemo() {
super(new BorderLayout());

//Create the demo's UI.
//questo bottone è quello che dà il via alla conta del progresso dell'esecuzione...forse tu la avvii in un altro modo cmq l'importante è che ci metti un addActionListener qualunque cosa usi, che deve avviare il tutto come fa.......
startButton = new JButton("Start");
startButton.setActionCommand("start");
startButton.addActionListener(this);

progressBar = new JProgressBar(0, 100);
progressBar.setValue(0);
progressBar.setStringPainted(true);

taskOutput = new JTextArea(5, 20);
taskOutput.setMargin(new Insets(5,5,5,5));
taskOutput.setEditable(false);

JPanel panel = new JPanel();
panel.add(startButton);
panel.add(progressBar);

add(panel, BorderLayout.PAGE_START);
add(new JScrollPane(taskOutput), BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

}

/**
* Invoked when the user presses the start button.
*/
....come fa questo qui
public void actionPerformed(ActionEvent evt) {
startButton.setEnabled(false);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//Instances of javax.swing.SwingWorker are not reusuable, so
//we create new instances as needed.
che istanzia l'oggetto di tipo Task e ci mette il listener
task = new Task();
task.addPropertyChangeListener(this);
task.execute();
}

/**
* Invoked when task's progress property changes.
*/
public void propertyChange(PropertyChangeEvent evt) {
if ("progress" == evt.getPropertyName()) {
int progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
taskOutput.append(String.format(
"Completed %d%% of task.\n", task.getProgress()));
}
}

il resto serve solo a creare l'interfaccia JFrame e renderla visibile riempiendola col JPanel ProgressBar...e il main per richiamare tutto :p
/**
* Create the GUI and show it. As with all GUI code, this must run
* on the event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("ProgressBarDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Create and set up the content pane.
JComponent newContentPane = new ProgressBarDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);

//Display the window.
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
GiganteBaba Inserito il - 01/09/2007 : 13:12:40
Citazione:
Messaggio inserito da Lamia

hai provato a sostituire null con this:

ProgessMonitor progressMonitor = new ProgressMonitor( this, "Upload in corso", "", 0,(int) file.length() );


il primo parametro indica il genitore della finestra che stai creando: se ci metti null....:p


niente da fare, neanche con this funge bene..
GiganteBaba Inserito il - 01/09/2007 : 09:04:15
Ma la classe in cui risiede il progressmonitor deve estendere JFrame? cmq proverò, non ricordo se ho già fatto questo tentativo.
Lamia Inserito il - 31/08/2007 : 23:25:46
hai provato a sostituire null con this:

ProgessMonitor progressMonitor = new ProgressMonitor( this, "Upload in corso", "", 0,(int) file.length() );


il primo parametro indica il genitore della finestra che stai creando: se ci metti null....:p

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,06 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000