Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Google Pixel 10 Pro XL è il top di gamma della serie Pixel, presentando un ampio display Super Actua da 6.8 pollici insieme alle novità della serie, fra cui la ricarica wireless magnetica Pixelsnap e le nuove funzionalità AI avanzate. Il comparto fotografico include un sistema a tripla fotocamera con zoom Pro Res fino a 100x, mentre il processore Tensor G5 con 16GB di RAM garantisce prestazioni percepite molto elevate su Android.
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
OnePlus risponde alle esigenze di chi cerca un dispositivo indossabile dalle dimensioni contenute con OnePlus Watch 3 43mm. La versione ridotta del flagship mantiene gran parte delle caratteristiche del modello maggiore, offrendo un'esperienza completa in un formato compatto. Il suo limite più grande è abbastanza ovvio: l'autonomia non è il punto di forza di questo modello, ma si raggiungono comodamente le due giornate piene con un uso normale.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-09-2008, 14:10   #1
tccgen
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
[JAVA]Problema coin i Thread e swing

Ho creato un finestra principale.
Alle pressione del tasto.
Vengono creati due thread,uno che mostra una jdialog ed una che esegue un 'operazione.
Alla fine dell'operazione va a scrivere sullo stdout OK.
All'interno della jdialog deve comparire una scritta.
Il problema è quando visualizzo la jdialog la scritta non viene visualizzata ma viene visualizzato solo al termine dell'operazione perchè succede questo??

Codice:
public class Ascoltatore implements ActionListener {
    private FinestraPrincipale fp;

    /**
     * @param args the command line arguments
     */
    
    public Ascoltatore(){
         fp = new FinestraPrincipale(this);
        
    }
    
    
    public final void istancePanelProgres(){
        PanelProgres pp = new PanelProgres(fp);
    }
    public final void istanceOperation(){
        Operazione o = new Operazione();
    }
    
    public static void main(String[] args) {
        // TODO code application logic here
        new Ascoltatore();
       
    }

    public void actionPerformed(ActionEvent e) {
        
       if(e.getActionCommand().equals("premi")){
           
           Thread t = new Thread(new Runnable(){

                public void run() {
                  istancePanelProgres();  
                }
               
           });
           
          Thread t1 = new Thread(new Runnable(){

                public void run() {
                  istanceOperation(); 
                }
               
           }); 
           
          t1.start();
          t.start();
            try {
                t1.join();
                System.out.println("Ok");
            } catch (InterruptedException ex) {
                Logger.getLogger(Ascoltatore.class.getName()).log(Level.SEVERE, null, ex);
            }
           
       }
    }

public class FinestraPrincipale extends JFrame{
   public FinestraPrincipale(Ascoltatore asc){
      this.setTitle("Example");
      this.setBounds(0, 0, 700, 700);
      JButton jbutton = new JButton("premi");
      jbutton.addActionListener(asc);
      this.add(BorderLayout.NORTH,jbutton);      
      this.setVisible(true);
   }
}



public class PanelProgres {
  public PanelProgres(JFrame frame){
      JDialog jdialog = new JDialog(frame,"jdialog",true);
      JPanel jpanel = new JPanel();
      jpanel.add(new JLabel("Waiting..Working in progres"));
      jdialog.getContentPane().add(jpanel);
      jdialog.setBounds(100, 100, 300, 100);
      jdialog.setVisible(true);
      
      
  }
}

public class Operazione {
    public Operazione(){
        for(int i = 0 ;i<10000;i++){
            System.out.println("Ciao");
        }
    }
    
}
tccgen è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2008, 09:21   #2
tccgen
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Se non vorrei utilizzare join( ) come potrei fare per attendere la teminazione di un thread
tccgen è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 10:01   #3
tccgen
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Allora nessuna idea?
tccgen è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 13:09   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da tccgen Guarda i messaggi
Il problema è quando visualizzo la jdialog la scritta non viene visualizzata ma viene visualizzato solo al termine dell'operazione perchè succede questo??
Il concetto importantissimo da capire è che Swing non è thread-safe. Esiste un thread, chiamato generalmente EDT, event dispatch thread, che è il thread che si occupa di "disegnare" la interfaccia utente e, tra le altre cose, dispacciare gli eventi ai listener.
Salvo casi particolari (e ben documentati), l'accesso alla interfaccia utente (impostazioni sui componenti, modifiche sui layout, ecc...) va fatto solo nel contesto del EDT.

Quando viene invocato un metodo di un listener (es actionPerformed) si è nel contesto del EDT. Tu hai fatto una join() su un thread. Questo vuol dire che stai tenendo tu impegnato il EDT e finché sei tu che lo blocchi, il controllo non può ritornare al framework e quindi aggiornare la interfaccia utente, che pertanto rimane "congelata".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia Recensione Sony Xperia 1 VII: lo smartphone per ...
Il registratore per il ventunesimo secol...
VMware: "alziamo i prezzi perch&eac...
Le prime Leapmotor B10 sono partite per ...
Destiny Rising sbarca domani: ecco perch...
Parallels Desktop si aggiorna con la ver...
Tesla guarda XPeng: le nuove P7 guidano ...
Roscosmos vorrebbe realizzare diverse mi...
Marshall Bromley 750 è il nuovo s...
OpenAI, la ristrutturazione societaria r...
Google perde in tribunale: stop all'obbl...
MasterLiquid Core II e Core Nex, i nuovi...
Porsche: addio alla produzione di batter...
WD Blue SN5100: Sandisk rinnova la serie...
Oracle espande la sua offerta di modelli...
Come il robot DEEBOT X8 PRO OMNI sta con...
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: 19:33.


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