Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [Applet & Threads]

  1. #1
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    274

    [Applet & Threads]

    Salve ho un quesito da proporre ,

    Io vorrei lanciare una Applet che composta da vari elementi , in cui vi è una Label , che deve cambiare alternatamente 2 colori così che si abbia una parvenza di intermittenza ..

    Volevo fare ciò utilizzando i threads ma non ci riesco ...

    Questo qua è il mio init()

    public void init() {
    try {
    java.awt.EventQueue.invokeAndWait(new Runnable() {
    public void run() {
    initComponents();

    while(true){
    jTextField1.setForeground(Color.green);
    try{
    Thread.sleep(1000);
    } catch(Exception e){

    }
    jTextField1.setForeground(Color.yellow);
    }

    }
    });
    } catch (Exception ex) {
    ex.printStackTrace();
    }



    }



    L'init è stato generato dinamicamente con la IDE di netbeans, la parte aggiunta è il while(true) { .. }

    IL Problema è che la applet proprio non si carica

    Qualche idea ?

    Grazie

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

    Re: [Applet & Threads]

    Originariamente inviato da ^NeXsUs^
    IL Problema è che la applet proprio non si carica
    Con quel loop stai tenendo tu "impegnato" il EDT (event dispatch thread).

    Solite questioni sul threading in Swing. Vedere:
    http://forum.html.it/forum/showthrea...readid=1313050
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    274

    Re: Re: [Applet & Threads]

    Originariamente inviato da andbin
    Con quel loop stai tenendo tu "impegnato" il EDT (event dispatch thread).

    Solite questioni sul threading in Swing. Vedere:
    http://forum.html.it/forum/showthrea...readid=1313050
    Ho letto un po' in giro , vari articoli però non c'è nessun esempio in cui si effetta un ciclo del genere ... potresti darmi un idea di come correggere la cosa ??

    grazie anticipatametne


    public void init() {
    try {
    java.awt.EventQueue.invokeAndWait(new Runnable() {
    public void run() {
    initComponents();

    }
    });
    } catch (Exception ex) {
    ex.printStackTrace();
    }

    HPApplet c = new HPApplet();
    Thread t = new Thread(c);
    t.start();

    }

    public void run(){
    while(true){
    try {
    jTextField1.setForeground(Color.red);
    Thread.sleep(1000);
    jTextField1.setForeground(Color.yellow);
    } catch (InterruptedException ex) {
    Logger.getLogger(HPApplet.class.getName()).log(Lev el.SEVERE, null, ex);
    }
    }


    }


    Ho provato così , ma non funziona :master:

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

    Re: Re: Re: [Applet & Threads]

    Originariamente inviato da ^NeXsUs^
    Ho provato così , ma non funziona :master:
    Non sarebbe comunque corretto. Forse non hai ben capito la questione del threading in Swing. Esiste 1 thread, chiamato per convenzione EDT, "event dispatch thread". Questo è il thread che si occupa di gestire tutta la interfaccia utente, che ha, tra i vari compiti, quello di "disegnare" la interfaccia utente e "dispacciare" gli eventi ai listener.
    Swing NON è thread-safe. Salvo pochi casi (oltretutto ben documentati), accedere alla interfaccia utente, cioè invocare qualunque cosa sui componenti è "safe" SOLO nel contesto del EDT.

    Quindi da un qualunque altro thread (come quello istanziato e avviato da te) NON è safe accedere ai componenti (setForeground su quel text field). Non essere safe, detto in generale, non vuol dire che non funziona mai o dà sempre errore. Vuol dire che se hai fortuna ti può andare bene .... ma in caso di tempistiche "sfortunate" tra i thread può non avere effetto o può creare casini (es. corruzioni di dati) o peggio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    274

    Re: Re: Re: Re: [Applet & Threads]

    Originariamente inviato da andbin
    Non sarebbe comunque corretto. Forse non hai ben capito la questione del threading in Swing. Esiste 1 thread, chiamato per convenzione EDT, "event dispatch thread". Questo è il thread che si occupa di gestire tutta la interfaccia utente, che ha, tra i vari compiti, quello di "disegnare" la interfaccia utente e "dispacciare" gli eventi ai listener.
    Swing NON è thread-safe. Salvo pochi casi (oltretutto ben documentati), accedere alla interfaccia utente, cioè invocare qualunque cosa sui componenti è "safe" SOLO nel contesto del EDT.

    Quindi da un qualunque altro thread (come quello istanziato e avviato da te) NON è safe accedere ai componenti (setForeground su quel text field). Non essere safe, detto in generale, non vuol dire che non funziona mai o dà sempre errore. Vuol dire che se hai fortuna ti può andare bene .... ma in caso di tempistiche "sfortunate" tra i thread può non avere effetto o può creare casini (es. corruzioni di dati) o peggio.
    Ok ho capito . Comunque in pratica l'effetto che voglio ottenere , non si può ottenere in qualsiasi altro modo ?

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

    Re: Re: Re: Re: Re: [Applet & Threads]

    Originariamente inviato da ^NeXsUs^
    Comunque in pratica l'effetto che voglio ottenere , non si può ottenere in qualsiasi altro modo ?
    Se non vuoi complicarti la vita con i thread, prova ad usare un javax.swing.Timer.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    274

    Re: Re: Re: Re: Re: Re: [Applet & Threads]

    Originariamente inviato da andbin
    Se non vuoi complicarti la vita con i thread, prova ad usare un javax.swing.Timer.
    Grazie , ora ci provo

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.