Witam, piszę sobie ponga sieciowego w klient-serwer i mam taki problem, otóż z tego co wyczytałem w applecie najpierw wykonywana jest metoda init(), później paint(), następnie start(), tak więc najpierw metodą paint() rysuję sobie applet, następnie w metodzie start łączę się z serwerem i czekam na dane od niego w nieskończonej pętli, w momencie, gdy dane otrzymam, chcę przemalować applet metodą repaint(). Nie działa to tak, jakbym tego oczekiwał, po uruchomieniu appletu i połączeniu z serwerem jest cały biały, jakby nic nie zostało namalowane. Pisałem również repaint() na początku metody start() (w razie jakby start było wykonywane przed paint), jednak to niczego nie zmieniło, nic nie zostało namalowane, applet jest biały. W czym tkwi problem? Zamieszczam kod klasy klienta:
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
public class Pong extends Applet
{
public int tab1;
public int tab2;
public Socket gniazdo;
public int bx,by;
public DataInputStream datain;
@Override
public void init()
{
tab1=200;
tab2=200;
bx=350;
by=200;
}
@Override
public void paint(Graphics g)
{
g.setColor(new Color(240,235,225));
g.fillRect(0, 0, 700, 450);
g.setColor(new Color(200,190,180));
g.drawLine(350, 0, 350, 700);
g.drawLine(351, 0, 351, 700);
g.setColor(new Color(0,0,0));
g.drawRect(0, 0, 699, 449);
g.drawRect(0, tab1, 15, 80);
g.drawRect(684, tab2, 15, 80);
g.setColor(new Color(118,175,240));
g.fillRect(1, tab1+1, 14, 79);
g.setColor(new Color(241,116,117));
g.fillRect(685, tab2+1, 14, 79);
g.setColor(new Color(0,0,0));
g.drawRect(bx-7, by-7, 14, 14);
g.setColor(new Color(92,202,89));
g.fillRect(bx-6, by-6, 13, 13);
}
@Override
public void start()
{
try
{
gniazdo = new Socket();
gniazdo.connect(new InetSocketAddress("localhost", 9753));
datain = new DataInputStream(gniazdo.getInputStream());
while (true)
{
bx = datain.readInt();
by = datain.readInt();
repaint();
}
}
catch(Exception e)
{
}
}
}