PDA

View Full Version : [JAVA] Finestra con progressbar, thread


kickquick
12-11-2010, 10:08
Non vi posto ancora codice ma vorrei farvi capire quello che vorrei realizzare:

La finestra principale (shell SWT) apre una dialog che all'attivazione di un pulsante fa partire dei processi che generano un file PDF e successivamente si apre il file PDF stesso. Ora ques'ultima procedura ci mette un po', vorrei che nel mentre che si sta generando il file PDF si apra una dialog con progress bar (magari anche indeterminata). Ho provato ad implementarla ma non si nota alcuno scorrimento della barra. Ho provato a mettere questo dialog con progress bar in una classe esterna che implementa i thread e a farla partire cosi ma sembra che prima il programma esegua il codice del programma principale e infine esegua il thread.

Spero di essermi spiegato bene! Se serve posto anche codice ma il programma è immenso, cmq se necessario posto le parti interessate.

Grazie per l'aiuto!

banryu79
12-11-2010, 10:17
Spero di essermi spiegato bene! Se serve posto anche codice ma il programma è immenso, cmq se necessario posto le parti interessate.

Sì dovresti postare il codice di riferimento, possibilmente solo le parti interessate (vedo che questo è il tuo primo messaggio, se devi postare del codice allora ti suggerisco di usare il tag CODE e di assicurarti che abbia un'identazione decente a beneficio dei lettori).

Comunque se ti servono informazioni circa il threading model di SWT (che non conosco bene, sono un utente di Swing) qui trovi due link utili (in particolare il secondo):
- Threading issues (http://help.eclipse.org/helios/topic/org.eclipse.platform.doc.isv/guide/swt_threading.htm)
- SWT: Respond to Long Running Tasks (http://www.javalobby.org/java/forums/t43753.html)

kickquick
12-11-2010, 10:19
grazie mille, ora do un'occhiata ai link. se non risolvo posto codice!

kickquick
12-11-2010, 11:57
allora ho spulciato un po ma non ci ho capito molto....:mc: . Posto un po di codice della classe principale da cui sono partito (naturalmente cosi non va):

....
if(variabile==true){

final Shell dialog = new Shell(shell, SWT.APPLICATION_MODAL|SWT.DIALOG_TRIM);//shell è dove è contenuta la finestra principale
final Label text = new Label(dialog, SWT.NONE);
text.setText("Caricamento pagina");
final ProgressBar pb=new ProgressBar(dialog, SWT.INDETERMINATE);
dialog.setBounds(150, 150, 300,150);
dialog.setText("Caricamento..");
text.setBounds(30, 10, 110, 15);
pb.setBounds(30,30,100,50);
dialog.open();//apre la finestra con la progressbar

metodi_di_creazione_pdf....
....
dialog.close();//chiude la finestra con la progressbar

apertura_file_pdf...
}
...



eventualmente dopo potrò essere piu preciso, comunque in questo modo, quando si verifica la variabile naturalmente vedo la finestra con la barra immobile e poco prima che il file pdf si apra si chiude in modo giusto. La classe principale credo che permetta l'apertura di dialog attraverso il cambiamento di una variabile poichè:


public PaginaIniziale(Shell shellParent){
super();

this.shellParent = shellParent;
}

/**
* Open the window
*/
public void open() {
final Display display = Display.getDefault();
createContents( display );
shell.open();
shell.layout();

while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}


il vero problema è che non ho mai lavorato con le SWT!!