Callback vs. Event listener

T

Timiiih

Gast
Hallo liebe Gemeinde!

Ich möchte hier einmal event listener und Callbacks (zum Beispiel wie in C) miteinander vergleichen und voneinander
abgrenzen. Beides ist dabei im Bezug auf die GUI Programmierung zu sehen, also beispielsweise die Reaktion darauf,
das ein Button geklickt wurde.

Wenn ich das richtig verstehe, kann man bei Callbacks einer Funktion ein Stück ausführbaren Code übergeben
(vgl. Beispiel bei Wikipedia). In diesem Fall würde das also bedeuten, dass ein Button etwas ganz alleine tun
könnte, wenn er ein Event bekommt, oder er könnte via Callback eine Funktion des Apps aufrufen, in dem der Button
verbaut ist (wie genau allerdings? Dafür müsste der Button doch irgendwie sein App kennen? Hierfür ein mini Beispiel wär schön).

Event listener sind doch quasi sehr mit dem Observer pattern verwandt. Hier hätte der Button eine Liste von Zuhörern, die
alle ein Interface implementieren, welches eine Funktion garantiert, die der Button aufrufen kann, wenn er geklickt wurde.
Wenn der Button also geklickt wurde, geht er die Liste seiner Listener durch und ruft besagte Funktion bei jedem einzelnen auf.
Die Listener selbst können diese Funktion dann implementieren und entsprechend reagieren.

Ein Beispiel für die Verwendung von Callbacks in dieser Situation würde mir das ganze vielleicht noch etwas klarer machen. Was sind die Unterschiede, Vorteile, Gemeinsamkeiten?

Danke,
Timiiih
 
S

SlaterB

Gast
von Schreibaufwand abgesehen ist das alles identisch,
ob ein Button nun direkt einen Callback startet oder genau einen Listener informiert und der Aktion xy startet, wo ist der Unterschied?
was zählt ist dass der Button gedrückt wurde und als unmittelbare Folge eine Aktion startet,
10 Menschen in 20 Ländern erfinden dafür 30 Design Pattern, in der Logik der Welt macht das aber keinen Unterschied

Beispiele findest du quasi überall, z.B. 'actionlistener example' in eine Suchmaschine eintippen, notfalls noch 'java' dazu,
ActionListener kennt aber sonst keiner

führt z.B. zum sowieso naheliegenden Link
How to Write an Action Listener (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)
dort sieht du eine schlecht benannte Klasse AL mit Button + Listener der gleich noch auf die 'App' an sich zugreift,
alles was du brauchst ;)
(edit: ok, dort ist die App selber auch der Listener, nicht besonders hilfreich für andere Fälle)
 
Zuletzt bearbeitet von einem Moderator:

muckelzwerg

Bekanntes Mitglied
Wenn man das ein wenig abstrakter sieht, ist es sowieso fast der gleiche Code. Ob die Funktion A nun in Klasse B steht oder in Klasse C, spielt "logisch" erstmal keine so große Rolle.
Die Frage ist da eher, wie es angenehm zu Verwenden ist, ob Absicherungen notwendig sind, welche zusätzlichen Schichten noch dazwischenliegen (sollen), wie es mit multiplen Threads aussieht usw.

Einen Callback willst Du vielleicht nicht aus einem GUI-Thread ausführen lassen.
Oder es kommt vielleicht der Tag, an dem Du multithreaded Callbacks aufrufst, dann musst viel prüfen/synchronisieren.
...
Letztlich sollte es nicht darum gehen ob eine Funktion nun "Callback" oder "Message Passing" oder "Event Listener" heißt.
Die wichtigen Fragen sind eher
Sichtbarkeit - Wer sieht was?
Authorisierung - Wer darf was?
Sicherheit - Wer könnte was Blödes tun? Wie schlimm wird es?
Modularität - Wer ist von wem abhängig?
Kontrollierbarkeit - Welche Threads? Events maskieren? ...
Praktikabilität - Wie wird erweitert? Welche typischen Veränderungen gibt es? Wo muss dann überall angepasst werden?
...


Du wirst recht schnell auf den Gedanken kommen, dass Dein Button nicht "wirklich" eine Funktion im Backend kontrollieren soll.
Aber ob er nun ein Ereignis an einen Manager schickt, oder selbst an ihm bekannte Zuhörer sendet oder ...
Eigentlich ist der "Callback" bei einer GUI auch nicht so der klassische Callback. Der Aufrufer hat mir dem Button letztlich nichts zu tun.
Den "Rückruf" verwendest Du eigentlich, wenn Du etwas anstößt (z.B. eine Datenabfrage übers Netzwerk) und dann asynchron darauf reagieren willst. "Mach xyz und ruf mich, wenn Du das Ergebnis hast".
Wenn Du einer GUI Funktionen injezierst, zu denen gar kein Handlungsfaden gehört, der von der GUI weiß, dann ist es eigentlich eher ein normaler Call.
Die Beispiele auf der englischen und deutschen Wikipediaseite sind für mich persönlich keine "echten" callbacks. Aber da kann man sicher lange drüber streiten. ;)
 
T

Timiiih

Gast
Hallo SlaterB, hallo Muckelzwerg!

@SlaterB:
Wie das mit action listenern funktioniert, habe ich verstanden. Gibt es auch so ein Beispiel für Callbacks, wo diese also benutzt werden um auf einen Buttonclick zu reagieren?

@Muckelzwerg:
Ich wurde leider explizit damit beauftragt ( ;-) ) standard Callback in C mit der Verwendung von event listenern zu vergleichen/gegenüberzustellen.
Ich bin mir nicht ganz sicher, ob ich deinen Post wirklich verstehe, aber ich glaube du willst die Aufmerksamkeit eher auf andere Fragen lenken, als auf callback vs eventlistener.
 

Wildcard

Top Contributor
Gibt es auch so ein Beispiel für Callbacks, wo diese also benutzt werden um auf einen Buttonclick zu reagieren?
Nicht in Java da ein C Callback dort nur über Reflection realisierbar ist und die sollte man nicht leichtfertig verwenden wenn es bessere Alternativen gibt.
 

muckelzwerg

Bekanntes Mitglied
Hättest Du doch gleich sagen können. Aber was Du willst, ist doch kein Vergleich, sondern Beispiele.
Ansonsten schnapp Dir doch ein paar von den Punkten, die ich aufgezählt habe und vergleich mal. :)
 
T

Timiiih

Gast
hey,

naja ich will die Beispiele ja um zu verstehen, was da los ist um dann selbst (vielleicht auch deinen Punkten) zu vergleichen.
Für event listener gibts ja viele Beispiele, u.a. das, was SlaterB verlinkt hat.

Da Callbacks ja in Java so nicht funktionieren, vielleicht kann man dann ein Beispiel in C oder Pseudocode konstruieren?
Das einzige, was mir einfallen würde, wär sowas hier in der Art:
Java:
class Button {
    listeVonRegistriertenFunktionsPointern;
   gotClicked((listeVonRegistriertenFunktionsPointern){
      für alle Fkt. in listeVonRegistriertenFunktionsPointern do
           führe Funktion aus
   }

  registriereFkt( (*Funktion));
  löscheFkt((*Funktion));

}

Ein App würde dann also eine Funktion beim Button registrieren, die dann ausgeführt wird, wenn der Button geklickt wurde.
Macht das so Sinn?

Timiiih
 

muckelzwerg

Bekanntes Mitglied
Beispiele zu C-Callbacks findest Du im Internet jede Menge. Ob das in jedem Fall Sinn macht ist eine andere Frage.
Für mich machen schon die Beispiele auf Wiki wenig Sinn.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX Tableview row callback AWT, Swing, JavaFX & SWT 0
G JavaFX Nutzen von Interface Callback<P,R> AWT, Swing, JavaFX & SWT 2
M SWT SWT - Threading / Callback AWT, Swing, JavaFX & SWT 3
Juelin in javafx Event auslösen AWT, Swing, JavaFX & SWT 4
G Mouse Event in anderemm Event auslösen AWT, Swing, JavaFX & SWT 50
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
izoards Java FX Window Event SHOWING AWT, Swing, JavaFX & SWT 17
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
J CheckBoxListCell auf click event in listView reagieren AWT, Swing, JavaFX & SWT 1
W JavaFX Etwas Tabellenartiges + Cell-Content-Changed-Event (o.ä.) AWT, Swing, JavaFX & SWT 30
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
B Swing Windowbuilder Rückgabewert im Event AWT, Swing, JavaFX & SWT 3
Z Befehl Action Event Verlassen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
K Event Handling ComboBox Event Handler AWT, Swing, JavaFX & SWT 7
Sugan Swipe Event? AWT, Swing, JavaFX & SWT 8
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
H Event Handling JavaFx - auf Event warten AWT, Swing, JavaFX & SWT 4
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
M Swing OnLoad-Event o. Ä. AWT, Swing, JavaFX & SWT 3
D Event Handling in Komplexen Anwendungen AWT, Swing, JavaFX & SWT 9
D Event Handling "Plötzlich" kein mouseMoved-Event AWT, Swing, JavaFX & SWT 2
A Minimalestopuhr: JLabel.setText() durch eigenes Event ändern AWT, Swing, JavaFX & SWT 6
J Swing JMenuItem-Event?? AWT, Swing, JavaFX & SWT 3
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3
A Mouse event und exit on close AWT, Swing, JavaFX & SWT 11
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
F Event Handling AWT, Swing, JavaFX & SWT 7
J Button Event nur einmal ausführen AWT, Swing, JavaFX & SWT 3
S SWT Shell durch Event in der Größe verändern AWT, Swing, JavaFX & SWT 7
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
T Anzahl Event Listeners AWT, Swing, JavaFX & SWT 4
A Swing JButton int im Event AWT, Swing, JavaFX & SWT 9
G Swing Onkeyup Event AWT, Swing, JavaFX & SWT 3
P Action Event abfangen etwas anders? AWT, Swing, JavaFX & SWT 2
3 Swing NullPointerException in AW Event-0? AWT, Swing, JavaFX & SWT 5
F Swing Auf JComboBox-Event erst NACH Auswahl reagieren AWT, Swing, JavaFX & SWT 8
P Swing Event das ausgelöst wird, sobald Änderung der Größe Abgeschlossen ist AWT, Swing, JavaFX & SWT 4
A Shift-Tab-Event auslösen AWT, Swing, JavaFX & SWT 5
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
W Swing Event bei Schließen des Fensters AWT, Swing, JavaFX & SWT 6
A Probleme mit dem KeyReleased-event AWT, Swing, JavaFX & SWT 3
J Doppelklick Event AWT, Swing, JavaFX & SWT 32
jueki Event bei Änderung der Spaltenbreite in einem JTable AWT, Swing, JavaFX & SWT 15
D jtabbedpane Event VOR tab-Wechsel AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Event Problem AWT, Swing, JavaFX & SWT 5
M JTree => Event Dispatching Error AWT, Swing, JavaFX & SWT 2
D Event in Fenster ausgeben + Observer + kein Plan AWT, Swing, JavaFX & SWT 2
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
H KeyUp-Event/Ereignis AWT, Swing, JavaFX & SWT 6
C Event Frage AWT, Swing, JavaFX & SWT 7
M Swing WindowListener -> Event abbrechen? AWT, Swing, JavaFX & SWT 2
K JToggleButton deaktivieren (komplettes event nehmen) AWT, Swing, JavaFX & SWT 2
R JTextField - Event bei jedem Buchstaben AWT, Swing, JavaFX & SWT 2
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
M Actionlistener ohne Event -.-?! AWT, Swing, JavaFX & SWT 2
O Probleme beim Zeichnen und AWT-Event-Queue-0 Exception AWT, Swing, JavaFX & SWT 5
D PropertyChangeListener Event auswertung AWT, Swing, JavaFX & SWT 7
O FlowLayout Button Event zuweisen? AWT, Swing, JavaFX & SWT 7
J remove() components bei event von JComboBox AWT, Swing, JavaFX & SWT 2
I event AWT, Swing, JavaFX & SWT 6
G Swing JFileChooser Event für neue Directory? AWT, Swing, JavaFX & SWT 5
X Checkboxen erstellt mit MouseClicked event AWT, Swing, JavaFX & SWT 10
Dragonfire Swing One componentResized Event AWT, Swing, JavaFX & SWT 14
data89 Was mache ich mit "Dispatched Event Thread"/Substance falsch? AWT, Swing, JavaFX & SWT 4
Kr0e Event simulieren AWT, Swing, JavaFX & SWT 5
S Tastatur Event auserhalb des fokuses aufnehmen AWT, Swing, JavaFX & SWT 4
R Swing ComboBox und doppelter Event!? AWT, Swing, JavaFX & SWT 10
M Swing Event mit Button AWT, Swing, JavaFX & SWT 7
B Wie kann ich ein event wieder beseitigen AWT, Swing, JavaFX & SWT 2
R Checkboxen - Event mit Controller abfangen AWT, Swing, JavaFX & SWT 7
Spin Window Event Beispiel AWT, Swing, JavaFX & SWT 6
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
Iron Monkey JTable 2 Selektionsfarben Mouse-Event AWT, Swing, JavaFX & SWT 8
Dragonfire JTree, Selection via event AWT, Swing, JavaFX & SWT 7
K JButton auf JPanel in JTable (Darstellungs-/Event-Probleme) AWT, Swing, JavaFX & SWT 16
B JInternalFrame resize event AWT, Swing, JavaFX & SWT 2
E Komponenten in Event Dispatch Thread erzeugen? AWT, Swing, JavaFX & SWT 4
D Event beim Laden eines JPanels? AWT, Swing, JavaFX & SWT 3
O Action Event auslösen bei unbekanntem JTextField AWT, Swing, JavaFX & SWT 3
R Registrieren um Event abzufangen AWT, Swing, JavaFX & SWT 3
N solange Maustaste gedrückt Event AWT, Swing, JavaFX & SWT 15
Daniel_L Nachrichten/Event aus nicht-modalen Dialogen abfragen? AWT, Swing, JavaFX & SWT 4
G Event an einer JComboBox registrieren AWT, Swing, JavaFX & SWT 8
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
A Event von Login zu Main klasse AWT, Swing, JavaFX & SWT 2
E bei gedrückte Taste --> Bitte nur ein Event auslösen AWT, Swing, JavaFX & SWT 4
W Kein MouseKlick-Event bei Bewegung AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben