Erstellen Sie ein benutzerdefiniertes Ereignis in Java

Ich möchte so etwas in Java machen, aber ich kenne den Weg nicht:

Wenn das Ereignis “Objekt 1” Hallo “” sagt, antwortet Objekt 2 auf dieses Ereignis mit “Hallo”.

Kann mir jemand einen Hinweis oder Beispielcode geben?

Sie wollen wahrscheinlich in das Beobachtermuster schauen.

Hier ist ein Beispielcode, um selbst loszulegen:

import java.util.*; // An interface to be implemented by everyone interested in "Hello" events interface HelloListener { void someoneSaidHello(); } // Someone who says "Hello" class Initiater { private List listeners = new ArrayList(); public void addListener(HelloListener toAdd) { listeners.add(toAdd); } public void sayHello() { System.out.println("Hello!!"); // Notify everybody that may be interested. for (HelloListener hl : listeners) hl.someoneSaidHello(); } } // Someone interested in "Hello" events class Responder implements HelloListener { @Override public void someoneSaidHello() { System.out.println("Hello there..."); } } class Test { public static void main(String[] args) { Initiater initiater = new Initiater(); Responder responder = new Responder(); initiater.addListener(responder); initiater.sayHello(); // Prints "Hello!!!" and "Hello there..." } } 

Verwandter Artikel: Java: Erstellen eines benutzerdefinierten Ereignisses

Was Sie wollen, ist eine Implementierung des Beobachtermusters . Sie können es komplett selbst machen oder Java-classn wie java.util.Observer und java.util.Observable

Es gibt 3 verschiedene Möglichkeiten, dies einzurichten:

  1. Thrower innerhalb von Catcher
  2. Catcher in Thrower
  3. Thrower und Catcher innerhalb einer anderen class in diesem Beispiel Test

DAS ARBEITSGITHUB-BEISPIEL I AM CITING Standard ist Option 3. Um die anderen auszuprobieren, entfernen Sie einfach den Codekopf ” Optional ” der class, die main sein soll, und legen Sie diese class als ${Main-Class} -Variable im build.xml Datei:

4 Dinge, die auf Seitenwürfel benötigt werden:

 import java.util.*;//import of java.util.event //Declaration of the event's interface type, OR import of the interface, //OR declared somewhere else in the package interface ThrowListener { public void Catch(); } /*_____________________________________________________________*/class Thrower { //list of catchers & corresponding function to add/remove them in the list List listeners = new ArrayList(); public void addThrowListener(ThrowListener toAdd){ listeners.add(toAdd); } //Set of functions that Throw Events. public void Throw(){ for (ThrowListener hl : listeners) hl.Catch(); System.out.println("Something thrown"); } ////Optional: 2 things to send events to a class that is a member of the current class . . . go to github link to see this code . . . } 

2 Dinge, die in einer classndatei benötigt werden, um Ereignisse von einer class zu empfangen

 /*_______________________________________________________________*/class Catcher implements ThrowListener {//implement added to class //Set of @Override functions that Catch Events @Override public void Catch() { System.out.println("I caught something!!"); } ////Optional: 2 things to receive events from a class that is a member of the current class . . . go to github link to see this code . . . }