Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Metodo invokeLater

  1. #1

    Metodo invokeLater

    Ciao a tutti,

    c´é qualcuno che potrebbe significarmi cosa significa precisamente questo codice?

    perché c´é runnable e cosa significa invokeLater?

    codice:
    		System.out.println("Programm gestartet");
    		
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					SnowComGUI frame = new SnowComGUI();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    		System.out.println("Main durchlaufen");
    	}
    Grazie mille!
    L'impossibile richiede solo più tempo...

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai dato un'occhiata alla documentazione?

    Quel Runnable scritto in quel modo è una classe interna anonima.

    Se c'è qualcosa di specifico che non capisci chiedi pure
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Forse ho finalmente trovato la soluzione poco dopo aver postato la mia domanda.

    L´approccio che ho descritto é usato spesso in GUI applications perché le classi Swing e AWt non sono Thread Safe. Esse dovrebbero essere constructed e manipolate sul EventDispatchThread (EDT). Con l´approccio descritto nel codice che ho riportato, ho che sicuramente la GUI é costruita nell´EDT.

    La Java´s GUI é fortemente single Threaded e tutte le cose correlate alle Java GUI dovrebbero andare sempre attraverso un singolo thread che nel nostro caso é "AWT-EventQueue-0".

    Per piccoli programmi queste cose possono anche essere evitate, ma una buona programmazione consiste nel tenere in considerazione questi fattori perché si potrebbe andare in deadlock.

    Se leggiamo la documentazione per: EventQueue.invokeLater, troveremo:
    Causes runnable to have its run method called in the dispatch thread of the system EventQueue. This will happen after all pending events are processed.

    Spero che questo sia utile a qualcun altro e che non ho scritto stupidaggini.

    Sono aperto a consigli e ulteriori spiegazioni naturalmente!
    L'impossibile richiede solo più tempo...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Originariamente inviato da minidiable
    Per piccoli programmi queste cose possono anche essere evitate
    Io personalmente, anche il più banale e "stupido" frame/dialog che implemento lo faccio comunque creare/aprire dal EDT.

    Originariamente inviato da minidiable
    e che non ho scritto stupidaggini.
    Sostanzialmente, quanto hai detto è corretto. Se hai capito queste cose non dovresti più avere problemi con AWT/Swing sul threading.

    Ah, come "corollario", il fatto del single-threading di Swing implica anche un'altra cosa molto importante: se nel contesto della gestione di un evento es. actionPerformed, mouseClicked, ecc... di un qualche listener tieni "impegnato" il EDT in qualunque modo (Thread.sleep, I/O, altro) ..... la tua interfaccia grafica è congelata e non-responsiva.
    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.