Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Con il codice che mi hai postato non ho riscontrato nessun problema...
    In quanto all NullPointerException non riesco a capire dove sia il problema... ho letto su un forum (non ricordo ora di preciso la discussione) dove era proprio scritto in evidenza che "Oggetti non serializzati non possono essere trasferiti su degli ObjectStream"

    Ti da errore con il codice che ho postato insieme all'errore?

  2. #12
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Non ho errori nè sul client nè sul server leggendo così sul server:
    ImageIcon image = (ImageIcon)in.readObject();
    però l'immagine che disegna è tutta bianca, c'è ancora qualcosa da riguardare.

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Allora, non so se hai apportato modifiche alla versione del server, comunque quelle che si devono utilizzare per provare sono l'ultima versione del client che ho postato e questa versione del server:

    codice:
    import java.net.*;
    import java.io.*;
    import javax.swing.*;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.awt.Graphics;
    import javax.imageio.*;
    
    class Provone2{
    	public static void main (String args[]){
    		Socket socket = null;
    		ServerSocket sSocket = null;
    		Image image = null;
    		ObjectInputStream in = null;
    		ImageIcon icon = null;
    		JFrame f = new JFrame ();
    		JPanel p = new JPanel ();
    		String port = JOptionPane.showInputDialog("Please enter server port");
    		int porta = Integer.parseInt(port);
    		try {
    			sSocket = new ServerSocket(porta);
    		}
    		catch (Exception e){
    			System.out.println("porta a Fanculo!");
    		}
    		try {
    			while (true){
    				System.out.println("attesa...");
    				socket = sSocket.accept();
    				System.out.println("partito");
    				in = new ObjectInputStream(socket.getInputStream());
    				icon = (ImageIcon) in.readObject();
    				image = icon.getImage();
    				Graphics g = p.getGraphics();
    				g.drawImage(image, 0, 0, null);
    				in.close();
    				break;
    			}
    		}
    		catch (IOException e){
    			System.out.println("immagine!");
    		}
    		catch (ClassNotFoundException e){
    			System.out.println("readobject!");
    		}	
    		f.setLayout(null);
    		f.getContentPane().add(p);
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		p.setBounds(0, 0, 500, 500);
    		f.setResizable(true);
    		f.setVisible(true);
    	}
    }
    Per ora non posso provare perché devo staccare... prova queste 2 versioni e vedi se ti da problemi, domani provo io e posto i miei risultati!

  4. #14
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Credo di aver sistemato, ora funziona.
    C'erano un paio di cose da mettere a posto, puoi googlare riguardo alle problematiche
    di serializzare una BufferedImage.

    Mi sono permesso anche di semplificare qua e là per allegerire il codice mentre facevo le prove.
    Ciao.

    codice:
    import java.net.*;
    import java.io.*;
    import javax.swing.JOptionPane;
    import java.awt.Toolkit;
    import java.awt.Robot;
    import java.awt.Rectangle;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import javax.imageio.*;
    import javax.swing.ImageIcon;
    import javax.imageio.stream.*;
    
    class Provone {
        public static void main (String args[]) {
            Socket socket = null;
            Robot robot = null;
            BufferedImage image = null;
            ImageOutputStream ios = null;
    
            String ip = JOptionPane.showInputDialog("Please enter server IP");
            String port = JOptionPane.showInputDialog("Please enter server port");
            int porta = Integer.parseInt(port);
            try {
                robot = new Robot();
                socket = new Socket(ip, porta);
            }
            catch (Exception e){
                e.printStackTrace();
            }
            try {
                image = robot.createScreenCapture(new Rectangle(1024, 768));	
                ios = ImageIO.createImageOutputStream(socket.getOutputStream());
                ImageIO.write(image, "jpg", ios);
                ios.flush();
            }
            catch (Exception e){
                e.printStackTrace();
            }			
        }
    }
    codice:
    import java.net.*;
    import java.io.*;
    import java.awt.FlowLayout;
    import javax.swing.*;
    import java.awt.image.BufferedImage;
    import javax.imageio.*;
    import javax.swing.ImageIcon;
    import javax.imageio.stream.*;
    
    class Provone2 {
        public static void main (String args[]) {
            Socket socket = null;
            ServerSocket sSocket = null;
            BufferedImage image = null;
            ImageInputStream iis = null;
            JLabel label = null;		
            JFrame f = new JFrame();		
    
            String port = JOptionPane.showInputDialog("Please enter server port");
            int porta = Integer.parseInt(port);
            try {
                sSocket = new ServerSocket(porta);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                System.out.println("attesa...");
                socket = sSocket.accept();
                System.out.println("partito");
                iis = ImageIO.createImageInputStream(socket.getInputStream());
                image = ImageIO.read(iis); 				
                label = new JLabel(new ImageIcon(image));
            }
            catch (Exception e) {
                e.printStackTrace();
            }	
            f.setLayout(new FlowLayout());
            f.add(label);		
            f.setSize(1024, 768);		
            f.setVisible(true);
        }
    }

  5. #15
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Originariamente inviato da c0der
    Credo di aver sistemato, ora funziona.
    C'erano un paio di cose da mettere a posto, puoi googlare riguardo alle problematiche
    di serializzare una BufferedImage.

    Mi sono permesso anche di semplificare qua e là per allegerire il codice mentre facevo le prove.
    Ciao.

    codice:
    import java.net.*;
    import java.io.*;
    import javax.swing.JOptionPane;
    import java.awt.Toolkit;
    import java.awt.Robot;
    import java.awt.Rectangle;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import javax.imageio.*;
    import javax.swing.ImageIcon;
    import javax.imageio.stream.*;
    
    class Provone {
        public static void main (String args[]) {
            Socket socket = null;
            Robot robot = null;
            BufferedImage image = null;
            ImageOutputStream ios = null;
    
            String ip = JOptionPane.showInputDialog("Please enter server IP");
            String port = JOptionPane.showInputDialog("Please enter server port");
            int porta = Integer.parseInt(port);
            try {
                robot = new Robot();
                socket = new Socket(ip, porta);
            }
            catch (Exception e){
                e.printStackTrace();
            }
            try {
                image = robot.createScreenCapture(new Rectangle(1024, 768));	
                ios = ImageIO.createImageOutputStream(socket.getOutputStream());
                ImageIO.write(image, "jpg", ios);
                ios.flush();
            }
            catch (Exception e){
                e.printStackTrace();
            }			
        }
    }
    codice:
    import java.net.*;
    import java.io.*;
    import java.awt.FlowLayout;
    import javax.swing.*;
    import java.awt.image.BufferedImage;
    import javax.imageio.*;
    import javax.swing.ImageIcon;
    import javax.imageio.stream.*;
    
    class Provone2 {
        public static void main (String args[]) {
            Socket socket = null;
            ServerSocket sSocket = null;
            BufferedImage image = null;
            ImageInputStream iis = null;
            JLabel label = null;		
            JFrame f = new JFrame();		
    
            String port = JOptionPane.showInputDialog("Please enter server port");
            int porta = Integer.parseInt(port);
            try {
                sSocket = new ServerSocket(porta);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                System.out.println("attesa...");
                socket = sSocket.accept();
                System.out.println("partito");
                iis = ImageIO.createImageInputStream(socket.getInputStream());
                image = ImageIO.read(iis); 				
                label = new JLabel(new ImageIcon(image));
            }
            catch (Exception e) {
                e.printStackTrace();
            }	
            f.setLayout(new FlowLayout());
            f.add(label);		
            f.setSize(1024, 768);		
            f.setVisible(true);
        }
    }
    Sembra una maledizione, nulla da fare... mi da questo tipo di eccezione sul sever:

    codice:
    java.net.SocketException: Connection reset
            at java.net.SocketInputStream.read(Unknown Source)
            at java.net.SocketInputStream.read(Unknown Source)
            at javax.imageio.stream.FileCacheImageInputStream.readUntil(Unknown Sour
    ce)
            at javax.imageio.stream.FileCacheImageInputStream.read(Unknown Source)
            at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
    
            at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(Unknown Sou
    rce)
            at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source)
            at javax.imageio.ImageIO.read(Unknown Source)
            at Provone2.main(Provone2.java:32)
    Ovvero la riga dove risiede l'istruzione
    codice:
    image = ImageIO.read(iis);
    edit! Non so come ma non mi da più quel problema, però sballa tutto perché sempre nell'istruzione di sopra restituisce immagine nulla!!!

  6. #16
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Googlando il discorso della serializzazione di una BufferedImage
    avevo visto che è piuttosto complesso.
    Può essere che ci siano dei "timing" di scrittura-lettura sul socket
    per cui la lettura fallisce. A me funziona regolarmente ma ho provato solo in localhost.

    Magari qualcun altro ti sa trovare la soluzione, io dovrei fare altre ricerche e non ho tempo.

    Non escluderei l'abbandonere la strada della serializzazione e
    passere agli array di bytes come nell'esempio che ti avevo postato
    (http://www.rgagnon.com/javadetails/java-0542.html)

    Alla fine puoi fare comunque tutto in memoria senza passare dal filesystem
    e avresti un metodo più laborioso ma robusto.

    Vedi qui:
    http://mindprod.com/jgloss/imageio.html#TOBYTES

    Ciao.

  7. #17
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Ho risolto il problema, ma adesso se n'è presentato un altro che non riesco a risolvere! Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.