JavaFX - nowy wątek otwierający nowe okno

0

Dobry wieczór. Postanowiłem uczyć się pisania w JavaFX. Chciałbym utworzyć nowy wątek (lub kilka wątków), w którym otwarte zostanie nowe okno. Szukałem odpowiedzi w internecie, ale nie znalazłem nic konkretnego, jedynie to, że nie mogę utworzyć okna poprzez metodę run() (a przynajmniej tak to zrozumiałem). Stąd też moja prośba o pomoc w znalezieniu rozwiązania.

0

A po co Ci ten nowy wątek?

0

Pracuję nad prostym komunikatorem. Dla każdej rozmowy chcę mieć oddzielne okno. Stąd wymyśliłem, że każde nowe okno będzie obsługiwane przez nowy wątek (jeden wątek, jedna rozmowa). W ten sposób uzyskałbym uporządkowanie. Oddzielny wątek decyzyjny (jeden dla wszystkich okien) przekazywałby wiadomość do odpowiedniego wątku.

1

Z tego co pamiętam wszystkie operacje UI muszą być wykonywane w jednym wątku, Zresztą tworzenie nowego okna w nowym wątku nie miałoby sensu,no chyba, że to okno na drugiej karcie graficznej:)

0

Rozumiem. W takim razie muszę tworzyć nowe okna wewnątrz main() i w jakiś sposób przekazywać tam treści moich wiadomości. Prawdopodobnie będę musiał jakoś reprezentować te okna. Klasa wewnętrzna chyba nie jest najlepszym pomysłem.

0

Tylko pytanie po co Ci wątki, chcesz ssać coś w tle, wykonywać jakieś obliczenie itd. Do prostych zadań masz gotowce, które są bezpieczne w UI, tu możesz poczytać co nieco.

0

Jeszcze przyszedł mi do głowy pomysł, by w liście trzymać referencje do pół tekstowych wszystkich okien.

0

@cs: Dziękuję za link, ale w moim przypadku jeden wątek ma pisać w wielu oknach. Problem w tym, że muszę w jakiś sposób odnosić się do elementów wewnątrz nich.

0

Poczytaj dokumentację u źródła, rozdział A Task Which Modifies The Scene Graph

0

@cs: Wybacz, ale niezbyt dobrze rozumiem ten przykład. Wrzucenie całych scen do grupy raczej nie wchodzi w grę, a jeśli wrzucę tam tylko pola tekstowe, to czy jakakolwiek zmiana w jednym z nich nie spowoduje zmiany także w polach w innych oknach?

0

Ehh, chodzi o to, że to co z poziomu wątku ma być zmieniane w UI robisz w runLater.

0

@cs: Już rozumiem. Dziękuję :)
Jeszcze mam takie pytanie: co sądzisz o moim pomyśle z trzymaniem referencji do pól tekstowych w liście? Oraz czy jest sens tworzyć listę wiadomości wychodzących (zastanawiam się, czy serwer zdąży odebrać moja wiadomość, zanim wyślę kolejną)?

0

Tylko po co? Przecież te pola tekstowe są w widoku rodzica, więc wystarczy przeiterować po elementach rodzica, który musi być kontenerem.

0

@cs: Jeśli dobrze rozumiem, rodzic to okno, z którego przyciskiem wywołuję nowe okno (lub okna - wszystko odbywa się więc w funkcji obsługującej przycisk). W moim przypadku otwieram nowe okno (lub okna) w kontrolerze, natomiast do pól odwołuję się z wątku innej klasy. Mógłbym prosić o jakąś podpowiedź, w jaki sposób przeiterować po tych elementach?
Wybacz zasypywanie pytaniami, ale staram się jak najlepiej zrozumieć temat.

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