Witam. Piszę projekt na politechnikę. Mam zaprojektować grę scrabble + sieć w języku java. Dokładnie robię 2 klientów (JApplet) i obsługujący grę serwer. Mile widziana pomoc, ponieważ muszę uczyć się czegoś innego i spędza mi sen z powiek ten projekt. Po prostu stanąłem w miejscu.
Mam następujący problem:
mam klasę główną MyApplet oraz dopisaną klasę Serwer. Przesyłanie
obiektów szło bez problemu z appletu na serwer i odwrotnie. Dopisane mam
do wysyłania i odbierania funkcje w obu tych klasach:
public static Gracz odbieranie(Gracz gracz) throws Exception{
ObjectInputStream input = new
ObjectInputStream(socket.getInputStream());
gracz=(Gracz)input.readObject();
return gracz;
}
public static void wysylanie(Gracz gracz)throws Exception{
ObjectOutputStream output = new
ObjectOutputStream(socket.getOutputStream());
output.writeObject(gracz);
}
Przesyłam tymi metodami cały obiekt klasy Gracz. Odbieram od klientów
obiekt, wysyłam im z powrotem ten obiekt i gdy po kilku operacjach
ponownie chcę odesłać obiekt to rzucany jest wyjątek po stronie
klienta:
"java.lang.NullPointerException" (dotyczy on tego:
gracz=(Gracz)input.readObject();)
oraz "java.net.SocketException: Connection reset"
dotyczący (ObjectInputStream input = new
ObjectInputStream(socket.getInputStream()); ).
Spróbowałem zamiast odbierania od serwera obiektu, wysłanie mu go
ponownie i to się udało.
Drugi problem jest dla mnie nie do rozwiązania!!
Serwer tworzy obiekt klasy TablicaLiter, która rozlosowuje litery graczom. Wcześniej to losowanie odbywało się w Applecie. Dane były zapisywane do tablicy gracz.tablica();
Doszedłem do wniosku, że losowanie musi robić serwer, ponieważ to od przetrzymuje informacje o ilości pozostałych literek w "worku".
TERAZ NAJLEPSZE!!
Kiedy wysyłam obiekt z serwera do appletu (po losowaniu liter!) to litery te nie są odrysowywane na applecie (lecz tylko puste buttony). Po prostu ta instrukcja zwraca false:
if (g.litery[i]=="A")
{
kafle[i].setIcon(new ImageIcon("a.jpg"));
}
.
.
.
if (g.litery[i]=="Z")
{
kafle[i].setIcon(new ImageIcon("a.jpg"));
}
natomiast po dopisaniu esle i wyświetleniu w pętli "g.litery", pojawiają się wszystkie literki tak jak należy. Oznacza to, że te litery faktycznie tam "siedzą". Śmieszne jest to, że jeżeli przed którąś z tych funkcji wstawię g.litery[0]="A", to pierwszy kafelek dostaje literkę A. Myślałem ze chodzi o białe znaki, więc użyłem funkcji trim(). Bez skutku.
Dzięki za pomoc i pozdrawiam!