Zdarzenie w obiektach

0

Witam

Posiadam taką o to klasę :

 public class AManager{
    public static void main(String[] args) {
        asterisk system = new asterisk("192.168.0.181", 5038, "apiuser", "apipass");
        Thread watek = new Thread(system);
        watek.start();       
        while(true){} //przywołanie formatki później bedzie
    }    
   
   public void onSmsReceived(){
        // jakis kod
   }

}

Jak można zauważyć tworzę obiekt, a następnie ten obiekt upycham w wątek. Obiekt, który utworzyłem ma na celu nasłuchiwanie tego co się dzieje w centrali telefonicznej. I tu się pojawia pytanie, jak pamiętam w c# korzystało się do tego z delegatów jednak tutaj nie wiem jak zmusić mój obiekt aby wywołał metodę onSmsReceived().

Zakładam, że któraś klasa będzie musiała implementować interfejs ActionListener, a gdzie indziej będę musiał skorzystać z metody addActionListener() ale totalnie nie ogarniam tego jeszcze.

Z góry dziękuję za wszelkie konstruktywne odpowiedzi i informacje.

0

Aby wywołać metodę na rzecz jakiegoś obiektu, tworzysz jego instację (jeżeli metoda nie jest statyczna) i wywołujesz ją: [nazwa_klasy].nazwa_funkcji przyzałożeniu, że funkcja nie jest prywatna.

ActionListenery stosujesz raczej do komponentów GUI. Co dokładnie chcesz osiągnąć?

0

Dzięki za podjęcie tematu.

Chcę utworzyć wątek, w którym obiekt podłącza się do PBX i odbiera zdarzenia jakie centrala generuje (zrobione), w tym obiekcie posiadam metodę onManagerEvent(ManagerEvent me){}, która jest wywoływana w przypadku odebrania informacji z centralki.
Dodatkowo "obok" tego obiektu, chcę utworzyć formatkę, która będzie posiadała jakieś elementy. Niech to na początku będzie jTextArea.

Jak możesz sobie wyobrazić i jedno i drugie (nasluchiwanie pbx, formatka) muszę powołać do życia aby zrobić sobie z nich obiekty, gdzie jeden z nich wywołując metodę onManagerEvent miałby przekazać, że na formatce w jTextArea ma pokazać się tekst.

0

Utwórz może Timer, który co pewien czas wywołuje metodę onSmsReceived().

0

No właśnie nie.

Wydaje mi się, że rozwiązałem swój problem, a nie tylko przykryłem smród poprzez taki myk:

W metodzie main, która jest wywoływana zaraz na starcie tworzę obiekt na podstawie klasy, która została utworzona przez NetBeans gdy dodałem jFrame (formatka głównego okna mojej aplikacji). Tej klasie dodałem metodę publiczną

public void loguj(String x){
 this.jTextArea.append(x);
}

Tak utworzony obiekt przekazuję jako parametr do konstruktora klasy, który tworzę jako drugi i to on nasłuchuje co PBX ma do powiedzenia i tam jest "logika" na wypadek np. nadchodzących sms'ow coś w stylu

public class asterisk implements Runnable {
private oknoGlowne okno;
public asterisk(oknoGlowne x){
 this.okno = x;
}

onManagerEvent(ManagerEvent me){
this.okno.loguj(me.toString());
}

}

To działa tak jak sobie wymyśliłem. Czy to jest rozwiązanie eleganckie i tak się to powinno rozwiązać czy też krycie smrodu - nie mam pojęcia.

Może zasugerujecie jakieś inne rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1