witam,

mam następujący problem: muszę napisać grę sieciowa w javie. Gra polega na graniu w kółko i krzyżyk na planszy 30 pól na 30. Gdy jeden z użytkowników gra, czyli jest jego tura, drugi ma zablokowane klawisze. Mój problem polega na tym, że klient dane z serwera odbiera tylko za pomocą przycisku "odbierz", samodzielnie gdy socket nasłuchuje na porcie i coś się na nim pojawi, program nie chce tego wyświetlić/przyjąć. Drugi problem to juz z serverem. Gdy jeden użytkownik coś wyśle a drugi naciśnie przycisk "odbierz" to program wisi... nie odbiera danych. Lecz gdy jeden coś wyśle, drugi też coś wyśle i Od razu użyje przycisku "odbierz", odbierze dane prawidłowo w programie, ale następna taka "tura" już powoduje zawieszenie programu...

kod serwera:
public class ServerRunnable implements Runnable
{
private int numer;
private Socket incoming;
private static boolean isFinish = false;
private static String strPrzychodzacy = "";
private static String strWychodzacy = "";
private static String strPrzychodzacy2 = "";
private static String strWychodzacy2 = "lock";
private InputStream inStream;
private OutputStream outStream;
private PrintWriter out;
private Scanner in ;
private static long[] threadsID = new long[2];
private static int numerID = 0;
public ServerRunnable(Socket i, int c)
{
try
{
incoming = i;
numer = c;
inStream = incoming.getInputStream();
outStream = incoming.getOutputStream();

	out = new PrintWriter(outStream, true);
	in = new Scanner(inStream);
	}
	catch(IOException e)
	{
		
	}
}
public void run()
{
	
			threadsID[numerID] = Thread.currentThread().getId();
			System.out.println("Podlacza sie watek  numer: " +Thread.currentThread().getId());
			numerID = numerID + 1;
			try
			{
				inStream = incoming.getInputStream();
				outStream = incoming.getOutputStream();
				out = new PrintWriter(outStream, true);
				in = new Scanner(inStream);
			
				
				while(isFinish == false)
					{
						if(Thread.currentThread().getId() == threadsID[0])
								{
							if(strWychodzacy == "lock")
								{
									out.println("lock");
									strWychodzacy = "";
								}
							if(strWychodzacy != null)
									
										out.println(strWychodzacy);
										
							}
								if(in.hasNext())
								{
									strPrzychodzacy = in.nextLine();
									System.out.println(strPrzychodzacy);
									strWychodzacy2 = strPrzychodzacy;
									System.out.println(strWychodzacy2);
								}		
									
									
								
				
								if(Thread.currentThread().getId() == threadsID[1])
								{	
									if(strWychodzacy2 == "lock")
									{
										out.println("lock");
										strWychodzacy2 = "";
									}
									if(strWychodzacy2 != null)
									{
										out.println(strWychodzacy2);
									}
								if(in.hasNext())
									{
										strPrzychodzacy2 = in.nextLine();
										strWychodzacy = strPrzychodzacy2;
										System.out.println(strPrzychodzacy2);
										System.out.println(strWychodzacy2);
									}
								}	
							
			
				}
				
				
				
		}
		catch(IOException f)
		{
		}
		
	
	
}

}

kod klienta(tylko funkcje wyslij,odbierz i polacz):
private JButton getPPolacz() {
if (pPolacz == null) {
pPolacz = new JButton();
pPolacz.setBounds(new Rectangle(678, 384, 105, 23));
pPolacz.setBackground(new Color(238, 238, 238));
pPolacz.setText("Połącz");
pPolacz.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
try
{
String port = tport.getText();
int port2 = Integer.parseInt(port);
echoSocket = new Socket("0.0.0.0",port2);
out = new PrintWriter(echoSocket.getOutputStream(),true);
in = new Scanner(new InputStreamReader(echoSocket.getInputStream()));

				}
				catch (IOException f)
				{
					System.out.println("Próba połączenia zakończona niepowodzeniem.");
					f.printStackTrace();
				}
			}
		});
		
	}
	return pPolacz;
}

private void wyslij(String txt)
{
try
{
if(txt.charAt(0) == 'p' && txt.charAt(1) == '-')
{
out.println(txt);
przyciskiZablokowane();
}
else
{
out.println(txt);
}
}
catch (NullPointerException e)
{
tPrzychodzace.setText("Nic nie wyslano");
}
catch (StringIndexOutOfBoundsException e)
{
tPrzychodzace.setText("Nic nie wyslano");
}
}

private JButton getPOdbierz() {
if (pOdbierz == null) {
pOdbierz = new JButton();
pOdbierz.setBounds(new Rectangle(592, 418, 81, 18));
pOdbierz.setText("receive");
pOdbierz.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{

				if(in.hasNext())
				{
				help = in.nextLine();
				if(help == "") 
				{
					
				}
				if(help != "") 
				{
				if(help.equals("unlock")) przyciskiOdblokowane();
				if(help.equals("lock")) przyciskiZablokowane();
				if(help.equals("KONIEC")) koniec();
				char[] h = help.toCharArray();
				if(h.length > 0)
				{
					if(help.charAt(0) == 'p') 
					{
					zaznacz(help);
					przyciskiOdblokowane();
					}
					if(help.charAt(0) != 'p' && !(help.equals("KONIEC")) && !(help.equals("lock")) && !(help.equals("unlock"))) 
					{
					tPrzychodzace.setText(help);
					}
				}
				}
			}}
		}
			);
	}
	return pOdbierz;
}