Problem z wielowątkowościa

0

Cześć, mam problem ze wielowątkowościa , a mianowicie chce zrobić tak, że mam watek menu, wktorym była by jakas animacja i i mozliwosc wyboru kolejnego poziomu gry. Po wybraniu poziomu watek menu by się zatrzymywal a wałczał watek gry. Po wyjsciu z gry do menu watek menu mialby sie włączac.

Napisałem cos takeigo

public class Menu_levela extends JPanel implements ActionListener,Runnable
{
	private JButton b_1, b_2,b_3,b_4;
	private JApplet aj;
	private Punkty punkty;
	private Thread menu;
	private Thread gra;
	private Manager_gry manager_gry;
	
    public Menu_levela(JApplet aj,Punkty punkty) 
    {
    	b_1=new JButton("Level 1");
		b_1.addActionListener(this);
		add(b_1);
		
		b_2=new JButton("Level 2");
		b_2.addActionListener(this);
		add(b_2);
		
		
    	this.aj=aj;
    	this.punkty=punkty;
    	
    	
    	menu = new Thread(this);
        menu.start();
    }
    public void run()
	{

			while(true)
			{
	 			//System.out.print("b");
				try
				{
					Thread.sleep(2000);
					
				}
				catch(InterruptedException e){}
			}	
		
	}
    public void actionPerformed(ActionEvent e) 
	{
	        if(e.getSource() == b_1)
	        {
	        	this.revalidate();
	        	manager_gry = new Manager_gry(aj,punkty);
	        	aj.setContentPane(manager_gry);
	        	aj.requestFocus(); 
	        	this.repaint();
	        	gra = new Thread(manager_gry);
	        	gra.start();
	        	try
	        	{
	        		menu.wait();
	        	}catch(InterruptedException w){}
	        	 
	        	
	        }	
	}
    
    
}

Tu wsumie na razie nic nie ma bo zablokowałem sie na tych watkach. W klasie manager_gry jest tak jak tu petla while() ktora napedza cała gre.
Tak na próbe napisalem zeby po załadowaniu się gry watek menu byl wait() ale wywala wyjatki, więc prosze o pomoc jak rozwiazac ten problemik :P

0

Wszystko pomieszałeś. To co opisałeś, to przykład w który nie ma z wątkami nic wspólnego. Wątki, to sytuacja w której coś dzieje się "równocześnie". Jeżeli równocześnie chciałbyś biegać po menu kiedy w grze coś się dzieje, to wtedy potrzebne są wątki. Jeżeli jednak menu podczas grania nie jest potrzebne, albo nawet nie jest widoczne, to jest to przykład kiedy nie ma sensu ani nie należy robić współbieżności.
Współbieżność występuje na przykład kiedy w czasie "chodzenia" po menu jego elementy np. kręcą piruety. ;)
No i robienie współbieżności za pomocą Swinga, który z założenia jest jednowątkowy, to duże nieporozumienie.
Wszelkie klasy próbujące manipulować obiektami Swinga a poruszane w innych wątkach niż Swing muszą wywoływać kod za pomocą metody invokeLater(). Muszą to robić po to, żeby Swing mógł wrzucić te zlecenia w kolejkę i wykonać kiedy "będzie miał na to trochę czasu". Gdyby był wielobieżny, to nie musiałby tego robić, tylko kod uruchamiałby się od razu - równocześnie z innymi zadaniami.

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