Olá pessoal,
Estou com um problema para dar refresh em um applet
que utiliza socket para receber imagens... A parte de receber a imagem e
mostrá-la na tela já está funcionando (GetImagem(), Refresh(), Disconnect()),
mas quando quero que o applet fique pedindo a imagem sem parar (GetImagem,
Refresh, GetImagem, Refresh....) ele nunca exibe a imagem na tela.... Acho
que ele deve estar ficando preso nesse ciclo e nunca libera processamento para
atualizar a imagem na tela..
Estou enviando o código para que vcs analisarem...
Deve estar faltando alguma coisa, talvez uma thread separada para o socket....
Me digam o q vcs acham.
Grato,
Wagner
import java.applet.*;
import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.lang.*; import java.io.*; import java.net.*; public class Cliente extends Applet
{ Image img; Image offscreenImage; Graphics offscreenGraphics; int height; int width; Socket mySocket; byte[] bBufSize = new byte[5]; DataInputStream isSocket; DataOutputStream osSocket; int len; public Cliente()
{ } public void init()
{ Dimension dim = getSize(); width = dim.width; height = dim.height; offscreenImage = createImage(width, height); offscreenGraphics = offscreenImage.getGraphics(); } public void paint(Graphics g)
{ if (img !=null) { offscreenGraphics.drawImage(img, 0, 0, this); g.drawImage(offscreenImage, 0, 0, this); } getMapa(); //Comentando esta linha (encerrando o ciclo com apenas uma imagem) o applet atualiza a tela normalmente.... } public void update(Graphics
g)
{ paint(g); } public void
start()
{ connect(); getMapa(); } public void connect()
{ try { mySocket = new Socket(getCodeBase().getHost(), 8000); isSocket = new DataInputStream(mySocket.getInputStream()); osSocket = new DataOutputStream(mySocket.getOutputStream()); } catch(Exception e) { e.printStackTrace(); } } public void disconnect()
{ try { isSocket.close(); osSocket.close(); mySocket.close(); } catch(Exception e) { e.printStackTrace(); } } public void getMapa()
{ try { osSocket.writeBytes("Get Mapa.jpg"); len = isSocket.read(bBufSize); //Recebe o tamanho do arquivo jpg String size = new String(bBufSize); byte[] bBuffer = new byte[Integer.parseInt(size)]; len = isSocket.read(bBuffer); //Recebe a jpg img = getToolkit().createImage(bBuffer); } catch(Exception e) { e.printStackTrace(); } repaint(); //Refresh na tela } public void
stop()
{ disconnect(); } public void destroy()
{ } }
|