Ho cercato su Google per imparare come creare eventi personalizzati e listener di eventi. Dopo aver letto alcuni articoli a riguardo, sono ancora confuso. Vorrei chiedere a voi ragazzi una revisione di i modi per creare eventi personalizzati (eventi non correlati alla GUI) e gestori. Alcuni possono fornire una semplice spiegazione su come creare eventi e ascoltatori personalizzati?Eventi Java e listener di eventi
risposta
Che, fondamentalmente, di creare un'interfaccia come l'ascoltatore come
public interface EatListener {
...
}
all'interno della classe EatListener, avete metodo che si chiama con l'evento come parametro del metodo; come
public void onEat(EatEvent);
quindi si può avere una classe come Human che implementa o crea un'istanza di EatListener; come
public class Human {
private EatListener listener;
public void eatFood(Food food) {
if(listener != null) {
listener.onEat(new EatEvent(food));
}
}
}
quindi è necessario disporre di EatEvent effettivo; che può essere semplice come wrapper per il cibo con possibilmente alcuni dati extra.
Come con qualsiasi interfaccia grafica su Java è possibile creare classi interne anonime da tale interfaccia:
new EatListener() {
public void onEat(EatEvent event) {
System.out.println("I just ate " + event.getFood().getName());
}
}
ho scritto un sacco di sistemi basati su eventi (non GUI) e ci sono molti trucchi per l'attuazione proprio . Alcune delle cose classiche sono threading e perdite di memoria.
Controllo threading/processo significa semplicemente che quando si attiva un evento, quando viene richiamato l'ascoltatore, immediatamente o successivamente? Se si attiva immediatamente, si può finire con un sistema con prestazioni davvero scadenti che reagisce costantemente a un evento che cambia immediatamente dopo che il listener è stato richiamato. Non c'è una risposta facile qui, e in realtà dipende dal tuo bisogno. In generale, se riesci a rinviare l'attivazione di un evento, avrai un sistema migliore (perché potrebbe evitare di chiamare più volte l'ascoltatore per lo stesso evento - o un ciclo di eventi che porta allo stesso evento)
Il secondo grande trucchetto è la perdita di memoria. La mancanza di eliminazione in Java è una cosa bella, ma gli ascoltatori sono una pistola gigante che è legata al tuo piede. Se si dispone di un listener collegato a un'istanza che utilizza un carico di memoria, a condizione che un altro oggetto contenga un riferimento a quel listener, tale memoria verrà sospesa. Ci sono un sacco di soluzioni a questo, come WeakReferences, ma in generale, devi essere abbastanza attento ed esaminare il numero di ascoltatori quando stai testando la tua applicazione e assicurati che si stacchino (non in elenco? :)) con garbo.
In breve, se fossi in te, vorrei prendere in considerazione usando qualcosa come: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/eventbus/package-summary.html http://codingjunkie.net/guava-eventbus/ che è stato sviluppato con molti di questi problemi in mente.
- 1. Listener di eventi in Java
- 2. Symfony2 listener di eventi
- 3. NHibernate listener di eventi
- 4. Symfony2 dispatcher di eventi personalizzati e listener
- 5. refresh listener di eventi Javascript
- 6. View listener di eventi - Javascript
- 7. performance listener di eventi Javascript
- 8. Listener di eventi personalizzati JavaScript
- 9. Listener di eventi personalizzati Android
- 10. swing: classe di supporto listener di eventi
- 11. OpenLayers 3: Rimuovere listener di eventi
- 12. Pulsante Escludi dal listener di eventi OnClick
- 13. listener di eventi nella finestra non rimuove
- 14. ExtJS Grid - Clicca listener di eventi
- 15. dattiloscritto - mantenere portata in listener di eventi
- 16. JavaScript listener di eventi per SVG trasformare
- 17. Come aggiungere obliquo $ http listener di eventi
- 18. Listener di eventi personalizzati sull'app per Android
- 19. Listener di eventi Softkeyboard in Android
- 20. Listener di eventi router angolare 2
- 21. Listener di eventi - Equivalente per Firefox?
- 22. Qual è la differenza, se esiste, tra il gestore di eventi e il listener di eventi?
- 23. Aggiunta e rimozione di listener di eventi con parametri
- 24. HTML5 EventSource listener per tutti gli eventi?
- 25. Listener per Widget lanciando ViewFlipper eventi
- 26. swing: Listener appropriato per JTextField modifica eventi
- 27. Aggiungi listener di eventi per formare l'elemento aggiunto dall'ascoltatore di eventi
- 28. Implementare più listener di eventi nello stesso frammento - Android
- 29. Aggiunta di listener di eventi a più elementi
- 30. estensione Chrome incendi listener di eventi multiplo di volte