Zdarzenia w ramach wątku - problem z przekazaniem informacji do wątku głównego

0

Jestem dość świeży w temacie a sprawa wygląda tak:

Chcę w moim GUI poprzez wciśnięcie przycisku tworzyć nowy wątek w którym będzie realizowane nasłuchiwanie na pewne zdarzenia. W rezultacie użytkownik wciskając przycisk będzie tworzył nowe wątki które nasłuchują. Wszystko śmiga tak jak należy tyle że dane z eventów lecą do konsoli a ja chciałbym wykorzystać je do zmian wartości zmiennych w wątku głównym. Jak to zrobić?

public static void DDEadvice implements Runnable{

  //to powinien być konstruktor przekazujący wartości dla pól SERVICE TOPIC i ITEM

  public run(){
        try
        {
            final CountDownLatch eventDiconnect = new CountDownLatch(1);
            final DDEClientConversation conversation = new DDEClientConversation();

            conversation.setEventListener(new DDEClientEventListener()
            {
                public void onDisconnect()
                {
                    System.out.println("onDisconnect()");
                    eventDiconnect.countDown();
                }

                public void onItemChanged(String topic, String item, String data)
                {
                    System.out.println("onItemChanged(" + topic + "," + item + "," + data + ")");
                 }
            });
            conversation.connect(SERVICE, TOPIC);
            conversation.startAdvice(ITEM);
            eventDiconnect.await();
            conversation.disconnect();
        }catch{ jakieś tam wyjątki }
    }
  }
}

Przy okazji chciałbym zapytać o sprawdzoną lekko strawną literaturę odnośnie wątków, obsługi zdarzeń.
Domyślam się że pewnie nikt mi na to nie odpowie w dwóch zdaniach więc poproszę chociaż o jakieś hasła, wskazówki.

0

Wystarczyło zadeklarować klasę wątku jako klasę anonimową aby korzystać z pól klasy macierzystej czyli:

class MojeGui {
// (...)
CountDownLatch eventDiconnect = new CountDownLatch(1);

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
         
            Thread newThread = new Thread(new Runnable() {
        
            public void run() {
                             // jakieś akcje w ramach wątku
                             // tutaj mogę korzystać z wartości pól z klasy MojeGui
                             eventDiconnect.await();

               }, nazwaWatku);
            newThread.start();
         }
// (...)
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
            eventDiconnect.countDown();
}

}

Wciskając przycisk 1 wielokrotnie, tworzą mi się kolejne wątki. Aby je wszystkie zakończyć wciskam przycisk 2 zwalniając zatrzask eventDiconnect.
Chcę teraz zrobić tabelę z wątkami i możliwością wyboru który zostanie zakończony.

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