Nel mio metodo main(String[] args)
non ho che una chiamata a SwingUtilities.invokeAndWait
per eseguire un metodo main1
sul thread Swing. Ho sempre pensato che ne avessi bisogno per la sicurezza dei thread. Mi è stato detto che non è necessario perché il primo thread per fare qualsiasi codice della GUI diventa il thread della GUI. O per dirla in altro modo, puoi utilizzare Swing solo da un thread, ma non importa quale. Ma non riesco a trovare una fonte per questo e mi piacerebbe essere sicuro.È necessario passare al thread Swing dal metodo principale di un'applicazione?
5
A
risposta
7
Quello che ti è stato detto è falso. Il metodo main
verrà inizialmente chiamato dal thread principale. Tutta l'attività relativa alla GUI deve essere eseguita su un thread completamente separato chiamato Thread di invio eventi. Il thread principale non diventa diventa EDT.
Un bel esempio per vedere di cosa sto parlando:
public class ThreadTest {
public static void main(String[] args) {
final Thread main = Thread.currentThread();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Thread edt = Thread.currentThread();
System.out.println(main);
System.out.println(edt);
System.out.println(main.equals(edt));
}
});
}
}
Problemi correlati
- 1. Java: passaggio al thread principale?
- 2. Picasso java.lang.IllegalStateException: chiamata metodo non dovrebbe accadere dal thread principale
- 3. Come passare parametri al metodo ThreadStart in Thread?
- 4. Esegui un metodo nel thread principale dal gestore eventi
- 5. Asserzione glide: java.lang.IllegalArgumentException: è necessario chiamare questo metodo sul thread principale
- 6. terminazione di un thread secondario dal thread principale (cacao)
- 7. Come passare parametri resi dal backend al metodo bootstrap angular2
- 8. Quando è necessario passare argomenti a `Thread.new`?
- 9. Per pthread, Come uccidere thread secondario dal thread principale
- 10. Android: modo corretto per passare un messaggio dal thread in background al thread dell'interfaccia utente?
- 11. È necessario usare kthread_stop se torniamo dal thread del kernel?
- 12. Come notare un'eccezione dal thread principale?
- 13. ObservanceValueForKeyPath viene sempre chiamato dal thread principale?
- 14. .NET Backgroundworker - Non c'è modo di far passare normalmente le eccezioni al thread principale?
- 15. È possibile eseguire un passaggio dal thread principale?
- 16. Rilevare quando entri/esci dal thread principale in Xamarin.iOS
- 17. Perché è necessario accedere ai componenti di Swing solo sul thread di invio eventi?
- 18. il sonno dal thread principale viene generato InterruptedException
- 19. chiama un altro metodo dal metodo principale di java
- 20. Gli script di accesso al metodo `ImportScripts` di Web Worker possono essere memorizzati nella cache dal thread principale?
- 21. Come chiamare il metodo principale di un programma Scala dal metodo principale di un programma java?
- 22. Perché non è possibile passare il mutex al thread?
- 23. Con Swing e Java, ciò che viene fatto dal thread "Swing-Shell"
- 24. Impossibile passare al thread gestito in WinDbg
- 25. async await: il thread principale è sospeso?
- 26. È necessario creare DependencySource sullo stesso thread di DependencyObject
- 27. NSFileManager removeItemAtPath blocca thread principale
- 28. Qual è la differenza tra la dichiarazione della variabile dal metodo principale e il metodo principale interno?
- 29. RuntimeError: thread principale non è in loop principale
- 30. funziona solo nel thread principale
Sede [Concurrency in Swing: Fili iniziali] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ initial.html). –
La documentazione di Swing afferma che questo è ciò che dovrebbe essere fatto. Tenderei a crederci, perché mentre ignorando il consiglio potrebbe funzionare il 99,9% delle volte, ha una possibilità di fallire qualche volta, e secondo le leggi dell'universo, questo errore si verificherà solo quando stai dimostrando il tuo programma al tuo più grande cliente o al tuo capo. –
Punto di pedanteria: è un thread AWT. –