Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    7

    [JAVA] jTextField.setText() non si aggiorna a video

    Ciao, ho un grosso problema. Non vi posto codice perchè è un progetto d'azienda. In soldoni sto costruendo un'interfaccia per un touchscreen che recupera i dati da un IO via UDP. Funziona tutto salvo una cosa che mi sembra abbastanza banale: dopo aver letto un datagram, interpretato ed estratto i valori che mi servono (prendiamo una temperatura ad esempio), richiamo una classe costruita in questo modo:

    codice:
    public class TS_Updater extends main_form implements Runnable{
        public TS_Updater(){
            Thread TS_Updater=new Thread(this);
            TS_Updater.start();
        }
    
        public void run(){
            Updater();
        }
    }
    quindi, quando mi serve, lancio un new TS_Updater e questo si dovrebbe occupare di tutto.

    Updater è definito nel file principale (NetBeans mi definisce tutti i componenti private, quindi ho poca scelta penso), ed il problema è qui.
    Questa funzione dovrebbe semplicemente fare un jTextField.setText("valore");

    In realtà il valore che viene visualizzato a video è sempre quello di default, mentre se lancio un jTextField.getText(); mi ritorna il valore che io ho impostato. Sembra che debba aggiornare il video in qualche modo, ma come? Ne ho inventate di tutte ma nulla (da repaint a validate e via dicendo XD ).

    Visto che è molto urgente mi salvereste proprio!!

    (ps: sono agli inizi con java )

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Parlando in generale, le operazioni sulla interfaccia grafica (aggiunta/rimozione di componenti o modifica dello stato dei componenti, es setText() ) va sempre e solo fatta nel contesto del EDT, "event-dispatch-thread", non di un thread qualunque. Questo perché Swing non è thread-safe.

    Per maggiori info, vedere i link che ho indicato in questo mio post.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    andbin,questo potrebbe riguardare anche il mio post?

    http://forum.html.it/forum/showthrea...readid=1185671

    potrebbe essere per lo stesso motivo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    7
    lol son talmente incasinato che ti ho risposto nel topic che avevi linkato

    ad ongi modo ho provato ad eseguire a modificare i thread utilizzando javax.swing ed il metodo SwingUtilities.invokeLater(). Ora è così:

    codice:
    public class...
        public TS_Updater(){
            Runnable TS_Updater =new Runnable(){
                public void run(){
                    Updater();
                }
            };
            SwingUtilities.invokeLater(TS_Updater);
        }
    }
    Purtroppo siamo allo stesso punto.

    Pensavo anche che potrebbe essere il fatto che queso thread è lanciato da un altro thread e quindi ho modificato anche il genitore con questo metodo. Funzionano entrambi, nessun errore di compilazione ma i testi restano dove sono..

  5. #5
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    reddy sono nella tua stessa situazione,ho pensato di poter cancellare i dati a video e farli rileggere da file ma niente...e tra l'altro il codice si appesantisce in modo spropositato...che casino queste swing!

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    7
    già, anche perchè io ho lavorato dal visual basic al C all'assembler, dall'html al php al js.. ma il java puro mai ed ho 48 ore di tempo per finire un lavoro e sto perdendo un sacco di tempo per una XXXXXXX del genere..

    non mi interessa molto capire come fare, mi interessa FARLO!

    EDIT: non fraintendete, non c'è l'ho mica con nessuno E' solo che per stavolta mi basta passare per iNiorante ed fare qualcosa anche ignorando completamente come funziona

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    7
    ora ho provato a modificare il codige generato da netbeans impostando a public le variabili che mi interessa modificare, quindi le vado a modificare da una classe che estende il main ma evitando così di usare i thread e nemmeno swing. continua a non funzionare.

    edit:
    quello che è assurdo è che se lancio un X.gettext(), mi ritorna il valore che gli ho impostato io, anche se a video non si vede!

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    7
    update:
    ho testato con un po' di echo ed ho scoperto che il valore del campo viene reinizializzato ogni volta con il suo valore di default alla fine della chiamata della funzione che lo modifica. quindi non è che non funzioni, è che il valore cambia così velocemente che non me ne ero accorto prima.

    nuova domanda quindi: come fare a fargli mantenere il valore? ho provato lasciandogli un "riferimento", cioè copiando il valore da impostare in una variabile contenuta nella classe dove sono scritte le specifiche della gui e del main. in questo modo sono sicuro che il valore non si perda. come mai non lo mantiene però?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    7
    problema risolto (dopo aver ucciso madonne, angeli, diavoli, bambini, maometti e budda)!

    praticamente netbeans mi crea il costruttore del main come:

    codice:
    public main_form(){
        init_components();
    }
    L'infame mi andava a resettare i valori delle textbox con i loro valori di default ogni 3x2 (non ho capito perchè ma al momento non me può fregare di meno). quindi ho modificato così:

    codice:
    public main_form(){
        init_components();
        try{
            Updater();
        }catch(Exception ex){}
    }
    e Updater mi riaggiorna il tutto leggendo da variabili globali.. e funziona ^^
    certo, la soluzione è sgrezza ma devo fare una settimana di lavoro entro 2 gg, quindi meglio di niente (del resto mi sono già giocato il paradiso oggi, quindi..)!

    S!

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.