Galera eh o seguinte estou desenvolvendo um aplicaçao, um pequeno servidor com funçoes limitadas, e meu codigo nao tah funfando.O trem e mais ou menos assim:
Testes da Aplicaçao
Client
// client.java
import java.net.*;
import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import javax.swing.*;
import java.awt.Image;
public class Client
{
public static void main(String args[] )
{
String sumString = "";
try
{
System.out.println("Abrindo o socket e criando o stream.");
String host = args[0];
Socket socket = new Socket (host, 5000);
DataOutputStream ostream = new DataOutputStream(socket.getOutputStream());
//DataInputStream istream = new DataInputStream(socket.getInputStream());
InputStream input = socket.getInputStream();
ostream.writeUTF("testando ...");
System.out.println("Nao passei no read ...");
BufferedImage imgcapturada = ImageIO.read(input);
System.out.println("Passei no read ...");
JFrame frm = new JFrame("Teste Imagem");
JPanel pan = new JPanel();
JLabel lbl = new JLabel(new ImageIcon(imgcapturada));
pan.add( lbl );
frm.getContentPane().add(pan);
frm.repaint();
frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frm.pack();
frm.setVisible(true);
socket.close();
}
catch(Exception e)
{
System.err.println(e);
}
}
}
Server
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.awt.Container;
import java.awt.Color;
import java.awt.Graphics2D;
import javax.imageio.*;
public class Server
{
public static int portNr =5000;
public static boolean conection = true;
public Server(){}
public static synchronized BufferedImage criaPaint(Socket client)
{
while(!conection)
{
try
{
client.wait();
}
catch (Exception e) {}
}
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
Point pt = new Point(0,0);
Rectangle screenRect = new Rectangle(pt, screenSize);
Robot robot = null;
try
{
robot = new Robot();
}
catch(Exception e)
{
System.out.println("ERRO _ ROBOT");
}
BufferedImage imgcapturada = (BufferedImage)robot.createScreenCapture(screenRect);
return imgcapturada;
}
public static void main( String argv[] ) throws IOException
{
ServerSocket ss=null;
try
{
ss = new ServerSocket(Server.portNr);
System.out.println("starting...");
}
catch (IOException e)
{
System.out.println( "I/O error " + e.toString() );
}
while ( true )
{
ServerConnection serverConect = new ServerConnection(ss.accept());
serverConect.start();
System.out.println("new connection");
}
}
}
class ServerConnection extends Thread
{
private Socket client;
ServerConnection ( Socket client ) throws SocketException
{
this.client = client;
setPriority( NORM_PRIORITY - 1 );
}
public void run()
{
//ImageIO.write(RenderedImage im, String formatName, OutputStream output);
boolean connection = true; // connection tester for current client
try
{
DataInputStream istream = new DataInputStream(client.getInputStream());
String sumString = istream.readUTF();
OutputStream out = this.client.getOutputStream();
BufferedImage imgcapturada = Server.criaPaint(this.client);
ImageIO.write(imgcapturada,"jpg",out);
Server.conection = false;
client.close();
}
catch ( IOException e )
{
System.out.println( "I/O error " + e );
}
}
}
A minha ideia a criar uma thread para executar os ascept() do servidor da forma que a regiao critica seja sincronizada e protegida de acessos
multiplos. A regiao critica eh o metoda criaPaint() e a variavel conection.O programa pára a execuçao qdo chega no trecho de codigo:
BufferedImage imgcapturada = ImageIO.read(input);
e nao mostra a janela com a foto tirada no servidor.
Desde jah agradeço
Carlos Martins