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

Responder a