Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto θ il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore piω ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte piω ampia, Dynamic Island piω piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciς che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-11-2008, 11:13   #1
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
[JAVA]Problemi basilari nelle progress bar: un aiuto per favore?

Salve a tutti,

mi θ sempre rimasto oscuro il mondo delle progress bar perchι dei dubbi mi attanagliano da sempre e non riesco a venirne fuori, anche guardando il Java Tutorial.

Quello che vorrei fare θ mettere una progress bar (magari anche in popup) durante il caricamento della mia applicazione (un classico). Nella mia applicazione parte un form all'inizio e dopo un click su un JButton viene avviata la vera interfaccia grafica (che richiede un po' di tempo per esser caricata in memoria). Quμ vorrei mettere la progress bar.

I problemi che ho sono:
1) Come faccio a sapere a priori quanto ci metterΰ a caricare, se devo impostare un avanzamento di una percentuale?

2) Come faccio a dirgli che deve partire dopo che ho premuto sul JButton e deve fermarsi quando l'applicazione θ pronta?

3) Un'altro problema θ che il JButton rimane premuto fino a che non ha finito di caricare in memoria tutto e la vera interfaccia non θ comparsa. Pensavo all'utilizzo di un Thread, ma θ questo il caso?
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 12:53   #2
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
1) Come faccio a sapere a priori quanto ci metterΰ a caricare, se devo impostare un avanzamento di una percentuale?
Non puoi.
In passato ho considerato di suddividere il lavoro di costruzione dell'interfaccia
in vari task (ad esempio 10, creazione finestra principale, creazione dialog1, eccetera)
e al completamento di ogni task far avanzare la pbar di 1/10 (sempre ad esempio).
Non ti serve farlo in un thread separato, anzi e' meglio se lo fai sull'EDT.

Quote:
2) Come faccio a dirgli che deve partire dopo che ho premuto sul JButton e deve fermarsi quando l'applicazione θ pronta?
Spiegati meglio.

Quote:
3) Un'altro problema θ che il JButton rimane premuto fino a che non ha finito di caricare in memoria tutto e la vera interfaccia non θ comparsa. Pensavo all'utilizzo di un Thread, ma θ questo il caso?
se il pulsante e' nella stessa finestra della pbar ti consiglio di disabilitarlo,
altrimenti chiudi la finestra con il pulsante (non ha piu' senso)
lovaz θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 13:29   #3
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
Quote:
Originariamente inviato da lovaz Guarda i messaggi
Non puoi.
In passato ho considerato di suddividere il lavoro di costruzione dell'interfaccia
in vari task (ad esempio 10, creazione finestra principale, creazione dialog1, eccetera)
e al completamento di ogni task far avanzare la pbar di 1/10 (sempre ad esempio).
Non ti serve farlo in un thread separato, anzi e' meglio se lo fai sull'EDT.
Ok, grazie, punto 1 chiarito.
Quote:
Originariamente inviato da lovaz Guarda i messaggi

Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
2) Come faccio a dirgli che deve partire dopo che ho premuto sul JButton e deve fermarsi quando l'applicazione θ pronta?

Spiegati meglio.
Dunque, riepilogando la situazione θ questa: quando la mia applicazione parte, mi chiede di fare login (e quindi la prima ed unica cosa a partire θ una semplice maschera con pochissime cose e un JButton OK che serve ad inviare i dati di login e autenticarsi). Una volta inseriti username e password se l'autenticazione (con il database) θ andata a buon fine provvede a lanciare la vera interfaccia. Per lanciare questa interfaccia ci vuole un po' di tempo. Per tutto questo tempo (tempo di autenticazione + tempo di caricare in memoria tutta la GUI principale) il JButton OK resta premuto. Quindi in teoria dovrei fare in modo innanzitutto che l'avvio della GUI principale dopo il form di login avvenisse a "JButton released (o UP)" e che la progress bar partisse (solo che non ci riesco), per poi terminare la sua "visualizzazione" al termine del caricamento. Spero di esser stato piω preciso ora.
Quote:
Originariamente inviato da lovaz Guarda i messaggi


se il pulsante e' nella stessa finestra della pbar ti consiglio di disabilitarlo,
altrimenti chiudi la finestra con il pulsante (non ha piu' senso)
No.. Non devo nθ posso disabilitarlo. Non capisco il perchι dovrei farlo sinceramente.

Grazie per il supporto.
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 13:47   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Cittΰ: Padova
Messaggi: 4131
Per il discorso del bottone che "rimane premuto" (in sostanza il repaint schedulato non viene eseguito in tempo, cioθ prima di tutto l'ambaradam di codice che apre l'interfaccia principale e che, come il repaint del bottone, sarΰ eseguito nel contesto dell'EDT [se l'interfaccia θ in AWT/Swing, come credo]) puoi risolvere in questo modo, se le premesse son quelle che seguono:
- il processo che fa partire l'ambaradam di cui sopra θ invocato nell'actionPerformed() del tuo Button.

Prova questo, nell'actionPerformed del button:
Codice:
public void actionPerformed(ActionEvent e)
{
    Runnable buildInterface = new Runnable()
    {
        public void run()
        {
            // ... 
            // ... codice di costruzione dell'interfaccia principale
            // ... 
        } 
    };
    SwingUtilities.invokeLater(buildInterface);
}
In questo modo, dato che nel metodo actionPerformed ti trovi giΰ nel contesto dell'EDT, eviti di far eseguire immediatamente (cioθ prima di uscire dal metodo actionPerformed del Button) "codice Swing/AWT" (che viene appunto eseguito subito nell'EDT, di fatto costruendo l'interfaccia, e solo dopo, perchθ si esce dal metodo actionPerformed, schedulando il repaint del button) per la costruzione della tua interfaccia che sarΰ invece "appeso" agli eventi che l'EDT dovrΰ processare, uscendo cosμ da actionPerformed e permettendo l'aggiornamento del Button (e magari la chiusura della finestra in cui si trova) prima dell'esecuzione effettiva della costruzione dell'interfaccia principale.

Questo se ho capito bene la faccenda, il che non θ scontato, eheh
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 13-11-2008 alle 13:50.
banryu79 θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 14:09   #5
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
Perfetto! Grazie banryu79!
Ora θ una scheggia..
Non resta che mettere una JProgressBar o un cursore di attesa nel momento che intercorre fra il dispose della JDialog di login e la comparsa della GUI principale.
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 14:23   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Cittΰ: Padova
Messaggi: 4131
De nada
Per il futuro, se hai problemi simili considera che questo know how lo reperisci facilmente nel sito java.sun (ovviamente in inglese).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 16:06   #7
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
Stavo pensando ad una cosa: θ possibile lanciare una JProgress bar in indeterminate mode, subito prima che parta l'inizializzazione di tutta la GUI, e disattivarla non appena inizializzata?
Che dite, puς funzionare come idea?

Perchι in caso la metterei direttamente nella mia funzione initialize() della GUI.
__________________
^ThE CyBoRg^

Ultima modifica di fbcyborg : 13-11-2008 alle 16:57.
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 16:34   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Cittΰ: Padova
Messaggi: 4131
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
Stavo pensando ad una cosa: θ possiile lanciare una JProgress bar in indeterminate mode...
Ah, perς, non le conoscevo... si tratta di questo?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 16:59   #9
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
Esistono due tipi di JProgressBar: quelle con la percentuale e quelle indeterminate .
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 17:12   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Cittΰ: Padova
Messaggi: 4131
Mi pare proprio che la seconda faccia al caso tuo.
La fai partire non appena lanci il processo di costruzione della GUI, e la spegni al completamento di tale processo che quando ha finito le fa un fischio.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 19:21   #11
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Cittΰ: San Francisco, CA, USA
Messaggi: 13827
Come ha detto lovaz puoi suddividere i vari momenti del caricamento in fasi ed incrementare la barra di progresso in base alla fase in cui il caricamento si trova.

Ovviamente per funzionare la barra la fase di caricamento e di login deve essere eseguita in un thread diverso dall'event dispatching thread .

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 19:27   #12
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
E' possibile mettere una scritta lampeggiante nella progress bar del tipo "Caricamento ..." ?
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 19:31   #13
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Cittΰ: San Francisco, CA, USA
Messaggi: 13827
Beh, JProgressBar ha un metodo setString() e se non sbaglio puoi anche impostare stili di barre personalizzati, quindi dovrebbe essere abbastanza costumizzabile, perς io personalmente non l'ho mai fatto, quindi piω di cosμ non so

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 19:37   #14
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
il setString() l'avevo provato ma non funziona. Per caso bisogna metterlo in un ciclo e farglielo fare ad ogni iterazione?
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 19:40   #15
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Cittΰ: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da fbcyborg Guarda i messaggi
il setString() l'avevo provato ma non funziona. Per caso bisogna metterlo in un ciclo e farglielo fare ad ogni iterazione?
Prova a dare anche un "setStringPainted(true)"

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano θ offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2008, 19:43   #16
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
Grazie! Ha funzionato!!!

__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 17:15   #17
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
Ho usato il sistema proposto da banryu79, ovvero il seguente codice per risolvere il problema del tasto OK che rimaneva premuto:
Codice:
public void actionPerformed(ActionEvent e)
{
    Runnable buildInterface = new Runnable()
    {
        public void run()
        {
            // ... 
            // ... codice di costruzione dell'interfaccia principale
            // ... 
        } 
    };
    SwingUtilities.invokeLater(buildInterface);
}
Ora in effetti, premuto OK, il thread parte e lancia l'interfaccia grafica principale.
Ora vorrei riuscire a far visualizzare una JProgressBar indeterminata in uno dei due seguenti modi, e deve essere visualizzata nel tempo che intercorre fra la pressione del tasto OK e la comparsa della GUI principale.
Ho fatto diverse prove ma non sono ancora riuscito a trovare il modo giusto.

1) JProgressBar che viene visualizzata come popup, dopo che si θ premuto il tasto OK e che quindi il form di login θ scomparso
2) JProgressBar che θ incorporata nel form di login e che viene visualizzata solo quando si preme OK (quindi sempre in fase di caricamento). Quμ perς il problema θ che appena si preme OK, faccio una dispose() del JDialog (ok, potrei toglierlo, e farlo fare alla GUI principale alla fine della sua inizializzazione.

Che consigli potete darmi?
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 17:40   #18
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Cittΰ: Padova
Messaggi: 4131
Usa un altro Runnable, che chiamiamo "showProgression", cosμ lo puoi accodare nell'EDT prima di "buildInterface".

Naturalmente devi passare a "buildInterface" una reference che punti al componente grafico da lanciare in "showProgression" in modo da poter fermare la ProgressBar e chiudere la relativa finestra appena la GUI θ inizializzata (cioθ al termine del processo definito in "buildInterface")

A questo punto ti potresti definire i due Runnable come classi al di fuori del metodo actionPerformed, che si limiterΰ a schedulare correttamente i due "task":
Codice:
public void actionPerformed(ActionEvent e)
{
    // costruisce "showProgression" e lo accoda nell'EDT
    ShowProgression progressionFrame = new ShowProgression();
    SwingUtilities.invokeLater(progressionFrame);
     
    // costruisce "buildInterface", passa riferimento al "showProgression"
    // da chiudere al completamento e lo accoda nell'EDT
    SwingUtilities.invokeLater(new BuildInterface(progressionFrame));
}
Il codice θ di puro esempio per illustrare il concetto.

- ShowProgression θ una classe che estende JFrame o JDialog (per la versione popup della ProgressBar) e implementa Runnable (cosμ θ accodabile come thread da eseguire nell'EDT)

- BuildInterface θ una classe che semplicemente estende Thread oppure implementa Runnable.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 θ offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 17:45   #19
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Cittΰ: ROMA
Messaggi: 2055
Ok, prima di provare ho una domanda ancora: le due classi che implementano runnable, devono implementare il metodo run(). All'interno perς non ci scrivo nulla giusto?
__________________
^ThE CyBoRg^
fbcyborg θ offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2008, 18:09   #20
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Cittΰ: Padova
Messaggi: 4131
Eh no, all'interno dei due metodi run() devi proprio metterci il codice che deve essere eseguito.

Riferendomi al problema di lanciare la costruzione dell'interfacica, ad esempio:
Codice:
class BuildInterface implements Runnable
{
    private ShowProgression progression;
    
    public BuildInterface(ShowProgression sp)
    { 
        progression = sp;
        //...
    }

    public void run()
    {
        // ... 
        // ... codice di costruzione dell'interfaccia principale
        // ... "chiudere" progression alla fine
    } 
};
Per ShowProgression, ad esempio:
Codice:
class ShowProgression extends JFrame implements Runnable
{
   
    // membri di ShowProgression...
    
    public ShowProgression()
    {
         //... costruttore, costruisci l'interfaccia via codice
         //... operazioni classiche, istanziazione componenti, 
         // setting dei LayoutManager, creazione e setting della JProgressBar
         //... ecc...
    }

    public void run()
    {
         // ...
         // ...codice di realizzazione del JFrame e dei suoi componenti (setVisible)
         // ...attivazione della progress bar
         // ...
    }
}
Spero sia piω chiaro, e spero sia esatto perchθ sono di fretta, sto staccando dall'ufficio!
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 θ offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Al via le offerte Amazon Prime e tutte l...
Prime Day e Amazon Seconda Mano: sconto ...
Cuffie e auricolari in offerta Prime Day...
Prime day: 7 mini PC in super sconto da ...
Scope elettriche e lavapavimenti Prime D...
Smartphone Prime Day: le migliori occasi...
Microsoft 365 Family in offerta Prime Da...
E-bike in offerta Prime Day: HillMiles e...
Prime Day TV: OLED LG B6E 65'' a 1.299€,...
Portatili in offerta Prime Day: i 5 migl...
300 milioni di dollari di server NVIDIA ...
'Io sono Giorgia': la Premier Meloni reg...
Galaxy S27 Ultra con Exynos 2700, Samsun...
Altman: tra OpenAI e Anthropic sulla sic...
Tesla Robotaxi, la notte è ancora...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB θ On
Le Faccine sono On
Il codice [IMG] θ On
Il codice HTML θ Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v