-1
votes

Comment créer un événement qui incendie chaque fois qu'un nouvel élément est ajouté à l'arraylist

Je veux créer une méthode qui incendie chaque fois qu'un nouveau message est ajouté à la liste de groupeChat ArrayList. Pseudo code: xxx pré>

ce que j'ai essayé, mais ne fonctionne pas: p> xxx pré>

classe de test: p>

public class testGruppen extends Thread {
Gruppe gruppe;


public TestGroup(){
    gruppe= new Gruppe("Monday");
}

public void run() {
    System.out.println("listen");
    gruppe.listenForChange();
}
public static void main(String[] args) {
    testGruppen test = new testGruppen();
    test.start();
    test.gruppe.write("1"); // write just adds a new String to groupchat
    test.gruppe.write("2");
    test.gruppe.write("3");
    test.gruppe.write("4");

}


5 commentaires

N'utilisez pas un gaspfait tandis que (vrai) boucle avec le sondage, mais utilisez plutôt un système de notification de rappel tel que en donnant la classe qui détient la tremblement de l'arraylistHangesupport, permettant ainsi aux auditeurs de changement de propriété. et dans la méthode publique qui met à jour la liste des matrices, informez tous les auditeurs de modifications.


Je ne comprends pas comment faire ça. Pourriez-vous me donner un petit exemple? @ Hovercaffulleels


Jetez un coup d'œil à Observateur modèle de conception.


Vous avez une inadéquation. (Peut-être par erreur.) En classe Testgruppen Vous avez ce membre de données de classe: gruppe gruppe; mais vous n'avez pas fourni le code de classe gruppe . Vous avez fourni le code de classe groupe .


Exemple donné - voir la réponse


3 Réponses :


0
votes

Pour éviter une CPU gaspillée tandis que (vrai) boucle avec interrogation, utilisez une méthode de rappel via un motif d'observateur / auditeur. Une façon de le faire consiste à donner à votre classe qui contient le tableau ARAYLIST un PropertyChangeSupport , laissez-le accepter les auditeurs, puis dans la méthode qui modifie le tableau, notifyez les auditeurs. xxx

puis il peut être utilisé comme: xxx


0 commentaires

0
votes

Vous devez jeter un coup d'œil à LinkedBlockingQueue classe . Cette classe est utile lorsque vous souhaitez réveiller un fil lorsqu'un nouvel élément est ajouté à une file d'attente. Dans l'exemple ci-dessous, chaque fois que vous ajoutez un nouveau message à la file d'attente, le thread imprimera le message et attendra le message suivant.

public class Foo extends Thread {

    LinkedBlockingQueue<String> messagesQueue;

    public Foo(LinkedBlockingQueue<String> messagesQueue) {
        this.messagesQueue = messagesQueue;
    }

    @Override
    public voir run() {
        while(true) {
            String message = messagesQueue.take();
           //The thread will sleep until there is a new message in the queue.
           System.out.println(message);
        }
    }

}


0 commentaires

1
votes

Qu'en est-il de l'utilisation de décorateur: xxx


1 commentaires

Vous auriez besoin de créer une interface pour permettre l'écoute des événements.