kufelmleka
#java
http://pastebin.com/h1C1MfRM

Klasa Abecadlo i metoda setStringToShow są umieszczone w jednej klasie.
W jaki sposób mogę przekazać zmienną stringToShow do klasy Abecadlo?

Dzięki z góry Mircy! ( ͡° ͜ʖ ͡°)
2
  • Najlepsze
  • Wszystkie komentarze
TaylorSwiftVerified
1
TaylorSwiftVerified
@kufelmleka: pokaż kod, bo nie rozumiem za bardzo. zmienna stringToShow jest zmienną lokalną w metodzie setStringToShow? w jakim sensie chcesz "przekazać zmienną do klasy Abecadlo" w takim razie?
1
TaylorSwiftVerified
@kufelmleka: i rozumiem że potrzebujesz przy każdym wywołaniu setStringToShow przekazać argument tej funkcji do jakiegoś wątku Abecadlo? pytanie do którego. będzie tylko jeden taki wątek?
1
TaylorSwiftVerified
@kufelmleka: okej, wiesz coś o synchronizacji wątków? powinieneś w klasie Abecadło utworzyć semafor na którym wątek uruchomiony na klasie Abecadło oczekiwałby na przekazanie mu tych stringów. klasa Abecadło posiadałaby następujące STATYCZNE pola:
* kolejka stringów do obsłużenia
* semafor

wówczas przekazanie stringa wygląda następująco:
* wrzucasz stringa do statycznej kolejki
1
TaylorSwiftVerified
@kufelmleka: oh wait, w javie to się nazywa ReentrantLock a nie semafor xD różni się jedynie tym że semafory są na intach, a ReentrantLock na wartościach boolowskich. nie potrzebujesz tutaj zaprzęgać integerów.
1
TaylorSwiftVerified
@kufelmleka: hm, to czy kolejka, stos, czy lista nie ma większogo znaczenia, ale struktura powinna być thread-safe, żeby dwa wątki nie próbowały się do niej dostać w tym samym czasie. zamiast mojego pomysłu znalazłem taką strukturę w dokumentacji javy:

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html

E take()

Retrieves and removes the head of this queue, waiting if necessary until an element
1
TaylorSwiftVerified
@kufelmleka: raczej nie ma innego sposobu. gdzie chciałbyś żeby ta zmienna się pojawiła w tym drugim wątku?

załóżmy, że drugi wątek coś tam sobie wykonuje, a w międzyczasie w pierwszym wątku wywoływana jest metoda setStringToShow. w którym miejscu po stronie drugiego wątku chciałbyś otrzymać tego stringa?
1
TaylorSwiftVerified
@kufelmleka: no to przecież właśnie to osiągnąłeś kolejką ( ͡° ͜ʖ ͡°) co ci się nie podoba w tym rozwiązaniu? że masz cała kolejkę stringów, czy to, że wątek jest blokowany w oczekiwaniu na stringa?
1
TaylorSwiftVerified
1
TaylorSwiftVerified
@kufelmleka: nie, to wystarczy.
1
TaylorSwiftVerified
nie mogę BlockingQueue jako static zrobić

@kufelmleka: zrób żeby klasa Abecadło była statyczna.
1
kufelmleka
@TaylorSwiftVerified: Jesteś Mordeczko, kurna bogiem. :D
Dzięki Cumplu Działa. ( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ
1
TaylorSwiftVerified
@kufelmleka: no problem (⌐ ͡■ ͜ʖ ͡■)
1
kolesxxx
niech metoda zwróci ci String
0
kufelmleka
@kolesxxx: A getter też sie nada.
0
kufelmleka
@TaylorSwiftVerified: Tylko, że to jest zmienna występująca tylko w tamtej metodzie. Da się tak mimo to?
0
kufelmleka
@TaylorSwiftVerified: @kolesxxx: A i stringsToShow jest ArrayList
0
kolesxxx
@kufelmleka: wincyj kodu
0
kufelmleka
0
kufelmleka
@TaylorSwiftVerified: Dokładnie. Docelowo w klasie Abecadlo będę chciał wyświetlać kolejne przychodzące stringToShow w JTextArea w ArrayList
0