Wpis z mikrobloga

Czy jeśli w Javie w klasie Controlera tworzę klasę GUIReload i startuje ją w nowym wątku (Klasa ta sprawdza czy jestem obok "potwora" jeśli tak to co 500ms zadaje mi obrażenia zmieniając pasek HP) po czym zamykam aplikację krzyżykiem to wątek GUIReload również zostaje zamknięty?
Zaprogramowałem że jak moje HP spadnie do 0 to wyświetli się komunikat że przegrałem po kliknięciu OK mam Thread.interupt(); oraz System.exit(0);

tutaj link do gita: https://github.com/s0bieskii/WarriorGame


#java #programowanie #pytanie #kiciochpyta #programista15k #javafx
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@s0bieskii: Jak robisz System.exit, to wszystko jest zamknięte niemal natychmiastowo, tylko wykonane zostaną callbacki zarejestrowane przez Runtime.addShutdownHook.
Thread.interrupt nie przerywa wątku, jedynie prosi go o wyłączenie się. Dany wątek zrobi to, jeśli na coś czeka, np. w Thread.sleep lub Object.wait, albo jeśli aktywnie sprawdza Thread.interrupted. Zajrzałem do wątku GUIReload i naparza on CPU na 100% zamiast używać Thread.sleep lub czegoś bardziej zaawansowanego oraz nie sprawdza statusu Thread.interrupted, więc się nie
  • Odpowiedz
@vytah: Próbuję walczyć z tymi wątkami i chciałem zrobi je jako demoniczne ale nijak moja java (15.0.2) nie rozpoznaje metody .setDeamon dla Thread. W czym może być problem? Czyżby to był jakiś framework?
  • Odpowiedz
@vytah: dobra zadziałało w metodzie initialize() Jaki czasami jestem głupi xdddd
BTW czym sprawdzałeś aktywne procesy? Że wiedziałeś że GUIReload używa 100% CPU? Zwykły menadżer zadań z Windows?
  • Odpowiedz
@s0bieskii: To po prostu widać: nieskończona pętla, która na nic nie czeka, tylko się kręci.
A jak chcesz pomierzyć wątki, to są specjalne narzędzia do monitorowania procesów javowych, typu JConsole, VirtualVM, MissionControl itd.
  • Odpowiedz