ImageIcon über Socket schicken (Serialisierung)

Stefan0001

Mitglied
Hey Leute


Habe ein kleines Problem:

Ich will mehrere Object über ein Socket senden.
Die Objecte beinhalten:
Zahlen (int)
Text (String)
Bilder (javax.swing.ImageIcon)
Datum (java.sql.Timestamp)
Uhrzeiten (java.sql.Time)

z.B:
Java:
public class Event extends ListValue implements Serializable{
    private static final long serialVersionUID = 123456789123456789L;
    
    public String name;
    public Timestamp datum;
    public Time dauer;
    public String text;
    public ImageIcon bild
    
    public Event(int id, String name, Timestamp datum, Time dauer, String text, ImageIcon bild){
        super(id);
        this.name = name;
        this.datum = datum;
        this.dauer = dauer;
        this.text = text;
        this.bild = bild;
    }
}


So nun habe ich ein Problem bei der Serialisierung. Wie ihr seht habe ich bereits der Klasse eine serialVersionUID verpasst. Nun kommt bei einem Freund von mir die Fehlermeldung:
Code:
java.io.InvalidClassException: javax.swing.ImageIcon; local class incompatible: stream classdesc serialVersionUID = -962022720109015502, local class serialVersionUID = 532615968316031794

Wie muss ich den die ImageIcon Klasse erweitern um sie übertragen zu können.
Oder soltle ich eine andere Klasse verwenden.
Meine idee wäre so etwas:
Java:
import javax.swing.ImageIcon;

public class Bild extends ImageIcon{
    private static final long serialVersionUID = 123456789123456789L;
    
}
scheint aber auch nicht wirklich zu funktionieren.

Achja:
Auf dem Server läuft Linux mit JRE 6.0 - bei dem Client läuft Win7 und JRE 7.0
Habe die serialVersionUID nur bei den Objuecten gesetzt die per Socket übertragen werde.
Achja bei meinem Versuch
Code:
public class Bild extends ImageIcon
habe ich später das Bild einem ImageIcon zugewiesen:
Java:
Event e;
ImageIcon i = e.bild;

-> e.bild vom Typ Bild
-> Bild erweitert ImageIcon
-> Event e wurde vom Server geschickt


Hoffe mir kann jemand helfen

Mfg
 
S

SlaterB

Gast
welche Java-Versionen hast du auf beiden Seiten?
System.out.println(System.getProperty("java.version"));

ach ja
> Auf dem Server läuft Linux mit JRE 6.0 - bei dem Client läuft Win7 und JRE 7.0
ungünstig eben

ImageIcon (Java Platform SE 7 )
Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see XMLEncoder.

-----

ein ImageIcon bietet sich aber anscheinend sowieso nicht zur Übertragung an, das Image-Attribut ist als transient markiert,
übertrag eher das herausgeholte Image-Objekt,
noch eher eine simple Datei von der Festplatte, falls das Bild so vorhanden ist, als byte[]
 
S

SlaterB

Gast
@kaetzacoatl
ist das eine verunglückt formuliere Hilfe?
ansonsten besser eigenen Thread aufmachen..

------

> dann müsste ich ja eine wrapper klassen benutzen oder?

was soll denn das IconImage dazu machen, sicher verpacken wie ein Koffer für die Flugreise?
nene, das passt hier nicht, eher muss man durch die Wand immer noch bohren auch wenn man ein Holzregal davor stellt ;)

mein Vorschlag wie gesagt eine Datei als byte[], oder ein BufferedImage malen, das ist auch noch am ehesten in byte[] zu übertragen


edit:
ich sehe aber gerade dass ImageIcon an sich doch geeignet wäre ;)
How to best serialize a java.awt.Image? - Stack Overflow

das Image-Objekt ist transient, wird nicht direkt serialisiert, eben wohl weil nicht direkt gedacht,
dafür schreiben Methoden die Daten einzeln, also durchaus ein Koffer, aber mit dem Verfahren welches ich eher andachte, 50/50 Recht behalten ;)

vielleicht helfen dir diese Methoden für eine eigene Übertragung, aus meinem Java 1.5 kopiert:
Java:
    private void writeObject(ObjectOutputStream s) 
	throws IOException 
    {
	s.defaultWriteObject();

	int w = getIconWidth();
	int h = getIconHeight();
	int[] pixels = image != null? new int[w * h] : null;

        if (image != null) {
	    try {
	        PixelGrabber pg = new PixelGrabber(image, 0, 0, w, h, pixels, 0, w);
	        pg.grabPixels();
	        if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
		    throw new IOException("failed to load image contents");
	        }
	    }
	    catch (InterruptedException e) {
	        throw new IOException("image load interrupted");
	    }
        }
    
	s.writeInt(w);
	s.writeInt(h);
	s.writeObject(pixels);
    }

    private void readObject(ObjectInputStream s)
	throws ClassNotFoundException, IOException 
    {
	s.defaultReadObject();
    
	int w = s.readInt();
	int h = s.readInt();
	int[] pixels = (int[])(s.readObject());

        if (pixels != null) {
	    Toolkit tk = Toolkit.getDefaultToolkit();
	    ColorModel cm = ColorModel.getRGBdefault();
	    image = tk.createImage(new MemoryImageSource(w, h, cm, pixels, 0, w));
	    loadImage(image);
        } 
    }
 
Zuletzt bearbeitet von einem Moderator:

Stefan0001

Mitglied
ALSO:

Ich Speicher die Bilder nun als ByteArray wie von dir vorgeschlagen.
Die Objecte enthalten nun ByteArray welche später zu ImageIcons gemacht werden.
Habe mir dafür 2 Methoden gemacht

imageToByteArray für das laden
byteArrayToImage Vor das speichern auf dem server

Java:
  public static byte[] imageToByteArray(ImageIcon img) {
        try {
            BufferedImage buImg = new BufferedImage(img.getIconWidth(), img.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
            buImg.getGraphics().drawImage(img.getImage(), 0, 0, null);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ImageIO.write(buImg, "PNG", byteArrayOutputStream);

            return byteArrayOutputStream.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    public static ImageIcon byteArrayToImage(byte[] image) {
        try {
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(image);
            BufferedImage buImg = ImageIO.read(byteArrayInputStream);
            return new ImageIcon(buImg);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

mich würde es trotzdem noch interessieren wie das mit dem ImageIcon funktioniert
Hier steht ja das man es für als wrapper bneutzen kann
How to best serialize a java.awt.Image? - Stack Overflow

mfg Stefan
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ImageIcon ist einfach nicht für Speicherung zwischen verschiedene Versionen vorgesehen, hab ja auch weiter oben aus der API zietiert,
hier wahrscheinlich grundlos, es hat sich nichts geändert,
aber um das zu unterstützen müste man sich mit etwas Aufwand darum kümmern,
und wenn bei dieser Klasse, dann vielleicht auch bei 1000 anderen, schon wird viel Arbeit daraus,

wobei diese zwecks Übertragung von Bildern, schließlich gibt es extra write + read-Methode, schon prädestiniert wäre,
nein, ich kann das eigentlich nicht begründen, technisch gehts nicht, warum ist mir unklar,
außer wiederum dass in der API ja auf irgendwas verwiesen wird, XMLEncoder, vielleicht geht das allgemein
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Socket ImageIcon über Socket --> Fehler Netzwerkprogrammierung 14
G rmi -> imageIcon Netzwerkprogrammierung 3
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Class über Netzwerk verschicken Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
M Socket JavaProg über einen Clienten steuern Netzwerkprogrammierung 5
M Mail über Exchange versenden Netzwerkprogrammierung 13
F C/S über HTTPS Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
Z File über Socket lesen Netzwerkprogrammierung 3
A HTTP Binärdaten über PHP-Skript in Datenbank schreiben bzw auslesen Netzwerkprogrammierung 2
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P FTP isFile() über FTP Netzwerkprogrammierung 3
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
F Char über Netzwerk senden Netzwerkprogrammierung 6
S HTTP Login mit CAS Authentisierung über SSL Netzwerkprogrammierung 2
C Befehle über ein GUI an Server senden Netzwerkprogrammierung 15
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
I Objekte über das Netzwerk Netzwerkprogrammierung 5
M Google Translate über Java ansprechen? Netzwerkprogrammierung 13
N Datenaustausch zwischen Java-GUI und PHP-Programm über SOAP Netzwerkprogrammierung 19
L RMI Informationen über die Clients herausfinden Netzwerkprogrammierung 5
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
1 Kommunikation mit externem Programm über TCP Netzwerkprogrammierung 2
U Informationen über Netzwerkclients herausfinden Netzwerkprogrammierung 2
J Socket Erreichbarkeit eines Java Servers (Socket-Lösung) über das Internet Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben