No. Io intendo dire che la inizializzazione della interfaccia grafica (istanziazione e setup dei vari componenti) andrebbe fatta solo nel contesto del EDT. Ma init() non ti viene invocato nel contesto del EDT .... bensì un altro thread creato appositamente dal sistema di plugin nel browser.Originariamente inviato da VincenzoTheBest
va bene comunque se decidessi di creare una classe che estende "Thread" e quindi poi nel momento opportuno istanziare l'oggetto della classe e far partire il thread nel seguente modo?
E' la stessa cosa oppure no?
Quindi la soluzione corretta sarebbe:
In init() semplicemente chiedo che setupGUI() venga eseguito nel contesto del EDT. E siccome invokeAndWait() può lanciare delle eccezioni, con un try-catch le catturo e poi ne stampo le informazioni su System.err (questo output si può vedere dalla "console" Java fornita dal plugin).codice:import java.applet.*; import javax.swing.*; public class TuaApplet extends Applet { private JButton button; // .... altro .... public void init() { try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { setupGUI(); } }); } catch (Exception e) { System.err.println("Applet initialization failed!"); e.printStackTrace(System.err); } } private void setupGUI() { button = new JButton("blabla"); // .... altri setup .... } }
Nota che il metodo che ho chiamato setupGUI() lo puoi chiamare come ti pare .... sul tutorial della Sun ad esempio lo chiamano createAndShowGUI() e talvolta createGUI().
Insomma ... il concetto è solo uno: la inizializzazione della interfaccia utente va fatta nel contesto del EDT.

Rispondi quotando