Olá Pessoal, estou fazendo um ultra básico VNC em java com a função de apenas exibir a imagem do cliente no servidor em um frame.
Isso consegui fazer, porém não sei como fazer ele ficar atualizando de segundo a segundo no mesmo frame.
Deem uma ajudinha urgente pra mim por favor
Segue o código:
//====== Cliente ======
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.ImageIcon;
public class Cliente2 {
private Robot robot;
public Cliente2() throws AWTException {
robot = new Robot();
}
public BufferedImage getScreen() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screen = new Rectangle( screenSize );
BufferedImage i = robot.createScreenCapture( screen );
return i;
}
public void saveScreen( String fileName ) throws IOException {
File file = new File( fileName );
file.createNewFile();
ImageIO.write( getScreen(), "JPEG", file );
}
public void sendScreen() throws IOException {
ImageIcon imageIcon = new ImageIcon( getScreen() );
Socket socket = new Socket( "127.0.0.1", 12345 );
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream( os );
oos.writeObject( imageIcon );
oos.flush();
os.close();
}
public static void main( String[] arg ) {
try {
Cliente2 sc = new Cliente2();
sc.saveScreen( "screen.jpeg" );
sc.sendScreen();
}
catch( AWTException x ) {
x.printStackTrace();
System.exit( 1 );
}
catch( IOException x ) {
x.printStackTrace();
System.exit( 2 );
}
}
}
//====== Servidor ======
import javax.swing.*;
import java.io.*;
import java.net.*;
public class Servidor2 extends JFrame implements Runnable {
private JLabel label;
private Thread t;
private boolean running = false;
private ServerSocket socket;
public Servidor2() {
label = new JLabel();
JScrollPane p = new JScrollPane( label );
getContentPane().add( p );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 800, 600 );
setVisible( true );
try {
socket = new ServerSocket( 12345 );
start();
}
catch( IOException x ) {
x.printStackTrace();
}
}
public void start() {
t = new Thread( this );
running = true;
t.start();
}
public void run() {
while ( running ) {
try {
Thread.sleep( 200 );
socket.setSoTimeout( 190 );
Socket s = socket.accept();
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream( is );
Object obj = ois.readObject();
if ( obj instanceof ImageIcon ) {
invalidate();
ImageIcon i = (ImageIcon)obj;
label.setIcon( i );
validate();
}
}
catch( SocketTimeoutException x ) {
}
catch( Exception x ) {
x.printStackTrace();
}
}
}
public void stop() {
running = false;
}
public static void main( String[] arg ) {
new Servidor2();
}
}
Agradeço desde já a atenção.