Wątki a aplikacja z GUI

0

Witam wszystkich :).
Kiedyś już robiłem aplikacje wielowątkowe w C++, ale w Javie cos mam problemy... W C++ robiłem je po to, żeby główne okno aplikacji sie nie "zwieszało", gdy program wykonuje jakieś długie operacje. Teraz w javie, chciałem uzyskać coś podobnego.

Tworzę aplikacje w NetBeans (tworzyłem też w eclipse + windowBuilder, ale tam to juz w ogole mi nie wychodziło coś...) która oblicza prawdopodobieństwo trafienia dwójki, trójki, czwórki i piątki w lotto spośród 1mln losowań tej ich maszyny :).

No i chciałem, aby to obliczanie prawdopodobienstwa dla wytypowanych liczb odbywało sie na wątkach, gdyż przy 1mln losowań aplikacja się wiesza na kilka sekund.

Wątki robię wg tego schematu(bez synchronizacji)

Wątki

Wątek tworzę i uruchamiam przy naciśnięciu przycisku Start w taki sposób

PP trojka = new PP(losowania, 3, iloscLosowan, wytypowaneL, jLabel1);
trojka.start();

PP czworka = new PP(losowania, 4, iloscLosowan, wytypowaneL, jLabel2);
czworka .start();

PP piatka= new PP(losowania, 5, iloscLosowan, wytypowaneL, jLabel3);
piatka.start();

losowania - ArrayList, gdzie każdy obiekt zawiera 5 wylosowanych liczb przez maszyne. jest ich 1mln
iloscLosowan - 1mln
wytypowaneL - liczby wytypowane przez uzytkownika
jLabel1 - label na ktorym ma wyswietlic wynik po zakonczeniu operacji

gdzie PP dziedziczy po Thread i zawiera funkcję run(), która odpowiada za obliczanie pp.

Gdzie popełniam błąd? Dlaczego aplikacja i tak się wiesza na kilka sekund?
Sorry, że nie dałem kodu, ale mam go na innym komputerze z którym nie mam teraz połączenia :P. Ale mam nadzieje, że wszystko zrozumiałe :).

Mimo to czekam na jakieś sugestie :).

[EDIT]
Wycofuje swój post :P. Wątki działają dobrze :). Problem tkwił w tym, że nie objąłem watkiem losowania tych 1mlnów liczb. A własnie to powodowało zwiechę.

Do zamknięcia.

Pozdro :D

0

Mimo że rozwiązałeś już swój problem, to dopowiem jeszcze dwa zdania. Po pierwsze pamiętaj, by stan kontrolek swingowych modyfikować tylko z wątku EDT np. poprzez SwingUtilities.invokeLater(). Druga rzecz wynika pośredni z pierwszej i jest ułatwieniem które można wykorzystać na potrzeby np. długotrwałych obliczeń czyli SwingWorker

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