Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Inserimento di una JProgressBar in un'elaborazione

    Ciao a tutti!
    Ho un programma sviluppato su più packages.
    In un packages vengono elaborate delle istruzioni un po' pesanti, quindi ci mettono un po' a completarsi.
    In un altro package, devo inserire una JProgressBar per quest'attesa, ma nonostante abbia letto la documentazione riguardo le JProgressBar (
    http://java.sun.com/docs/books/tutor...ress.html#bars
    ), non riesco a capire come impostare l'avanzamento in relazione alle istruzioni che eseguo.

    Spero possiate aiutarmi, ciao!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Inserimento di una JProgressBar in un'elaborazione

    Originariamente inviato da trez
    non riesco a capire come impostare l'avanzamento in relazione alle istruzioni che eseguo.
    Dipende innanzitutto da cosa ... anzi meglio dire quante cose devi fare. Immagina che tu debba elaborare 10 file, bene la tua progress bar potrebbe andare da 0 a 10 e ad ogni file elaborato incrementi il valore. Oppure immagina di dover inviare su un socket i dati di un file, potresti indicare sulla barra la percentuale 0-100% relativa al trasferimento del file.

    Insomma ... per farla breve: il tuo "lavoro" che devi compiere può essere suddiviso in "passi" elementari per cui abbia senso/utilità mostrarne l'avanzamento?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Beh il lavoro è così lungo che di certo c'è bisogno di una barra d'avanzamento, comunque posso si suddividere il tutto in azioni più semplici, ma ora la domanda sorge spontanea: come faccio? Come realizzo la cosa?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da trez
    Beh il lavoro è così lungo che di certo c'è bisogno di una barra d'avanzamento, comunque posso si suddividere il tutto in azioni più semplici, ma ora la domanda sorge spontanea: come faccio? Come realizzo la cosa?
    Innanzitutto l'intero lavoro lungo va eseguito in un nuovo thread a sé stante. L'avvio del lavoro immagino che sia causato da qualche operazione sulla tua interfaccia utente: un click su un pulsante ... la selezione di una voce di menù ... la pressione di un certo tasto sulla tastiera o altro. Quando ricevi questi eventi sei nel contesto del EDT (event dispatch thread), che non devi mai bloccare per troppo tempo, pena il "congelamento" della interfaccia utente.
    Devi quindi creare ed avviare un nuovo thread in cui eseguire questo lavoro lungo.

    Nel tuo thread eseguirai il tuo lavoro, chiaramente, ma in certi "punti" del lavoro in cui ritieni opportuno (ed è qui che devi scegliere quando ha senso indicare un "avanzamento") dovrai fare un setValue() sulla progress bar per impostare il valore. Valore che può essere banalmente l'ultimo+1 (un incremento) oppure un valore calcolato (es. in percentuale) magari in base allo stato del tuo lavoro.

    L'unica cosa da tenere presente, molto importante, è che per operare sulla progress bar devi essere nel contesto del EDT. Le interfacce AWT/Swing (salvo per certi metodi/operazioni ben documentati) non sono "thread-safe". Quindi fare ad esempio un getValue() o setValue() sulla progress bar nel contesto del "tuo" thread non va bene. Devi usare invokeAndWait() di SwingUtilities.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.