Odczyt DataInputStream w Applecie - applet biały

Odczyt DataInputStream w Applecie - applet biały
TA
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 13 lat
0

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:

Kopiuj
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)
        {
            
        }
    }


}
0

U mnie działa, pewnie jest źle osadzony w pliku HTML.
Dodaj jakąś użyteczną obsługę błędów. To jest minimum.

Kopiuj
        catch(Exception e)
        {
             System.out.println(e);
        }
TA
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 13 lat
0

bo, działa, bo nie znalazł serwera, więc wyszedł z bloku try nie realizując pętli while, gorzej, jak znajduje serwer
a applet uruchamiam z poziomu NetBeans przez Applet Viewer, nie z przeglądarki

edytowany 1x, ostatnio: Tamyl
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Zmieniłem adres na "dupa". Chyba nie ma takiego serwera. Aplet działa i w przeglądarce i w appletviewerze. Jeśli nie działa w NetBeans, to winne jest NetBeans.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
TA
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 13 lat
0

bogdans, chyba się nie rozumiemy. Applet normalnie działa, gdy serwer nie zostaje odnaleziony, wtedy wypluwa wyjątek i nie wchodzi do pętli while. Problem występuje, gdy znajdzie serwer.

0

Ok, nie przeczytałem dokładnie. Aplet wchodzi w pętle while i czeka na dane serwera. Musisz więc wywołać repaint wcześniej: na końcu metody init() albo przed pętlą while.

TA
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 13 lat
0

Pisałem również repaint() na początku metody start()

chyba znowu niedokładnie przeczytałeś.

0

Tym razem przeczytałem dokładnie, uruchomiłem u siebie serwer na porcie 9753, a potem uruchomiłem aplet (w obu podanych wersjach) i podziwiałem boisko.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.