Brak interakcji przy uruchamianiu gry przez proste menu

0

Witam.

Piszę małą grę i właśnie stworzyłem do niej bardzo proste menu pozwalające wybrać 2 parametry, takie jak ilość graczy i do ilu zwycięstw gramy. Menu ma jeden przycisk - START, po którego wciśnięciu uruchamia się gra i jej okno (JFrame). Gra uruchamia się normalnie, jednak nie reaguje na żadne klawisze wciśnięte ani inne eventy, nawet nie da się normalnie zamknąć okna (krzyżykiem).

jButton1 - przycisk Start;
metoda Main.run() odpala okno JFrame i cala petle gry.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

        new Main().run();// TODO add your handling code here:
     
    } 

Czy mógłby mi ktoś zasugerować, czym to może być spowodowane?

0

Czy metoda run klasy Main się kiedykolwiek kończy? Jeżeli nie, to znaczy, że blokujesz wątek AWT (AWT event dispatching thread).

"new Main().run()" powinieneś wykonać w innym wątku. Najprościej to osiągnąć poprzez odziedziczanie Thread przez Main i wywołanie "new Main().start()" (nie run()).

http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html

0

Wróć do jakiegoś tutoriala/kursu/wtg javy... bo powiemy Ci co masz zrobić, ale zaraz potkniesz się kilka kroków dalej...

metody listenerów swingowych wykonywane są w wątki swinga, a on ma tylko jeden wątek i jeśli chcesz, by okna działały, to tego wątku nie blokuj, nigdy. Zakładam, że w run jest pętla gry, więc zabierzesz wątek swingowi i będzie zawieszony. Zamiast tego, odpal to w innym wątku... jako, że twoje Main pewnie implementuje Runnable, to możesz zrobić tam tak:
new Thread(new Main()).start();

0

Dzięki Panowie, faktycznie odpalenie okna gry jako osobnego wątku rozwiązało mój problem.

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