PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : image persistieren



Jor
22-11-2006, 19:31
Hallo zusammen,

ich versuche vergeblich Images zu persistieren. :(
Ich habe eine Datenklasse erstellt, in der sind zwei Variablen vom Typ Image,
in jede wird jeweils ein Bild hinterlegt. Von diesem Päärchen existieren in einer HashMap einige. Die ganze HashMap möchte ich in eine Datei schreiben. Aus der HashMap Images auszulesen und in ein Label zu legen funzt. Aber das Speichern haut nicht hin, bekomme immer eine ganze Latte von Fehlern wie folgt: java.io.NotSerializableException: java.awt.image.BufferedImage
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1075)
at java.io.ObjectOutputStream.defaultWriteFields(Obje ctOutputStream.java:1369)
usw...
Ich habe die Containerklasse erstellt mit : implements java.io.Serializable.
Wenn nötig gebe ich gerne weitere Infos oder Code, hoffe ich habe ausführlich genug beschrieben.
Was mache ich falsch?

mehlvogel
23-11-2006, 08:23
Das sagt die Exception schon sehr deutlich:

Du möchtest ein Objekt vom Typ BufferedImage serialisieren, diese Klasse implementiert aber nicht das nötige Interface (Serializable), ergo wird eine "NotSerializableException" geworfen.

Jor
23-11-2006, 08:48
Erstmal danke für die Antwort. Ja, soweit war ich auch, aber wie kann ich das aber ändern??? Eigentlich benutze ich kein BufferedImage, sondern nur Image, habe es auch versucht, die Images als Object in den Variablen abzulegen, aber brachte keine Verbesserung.
Wie bekomme ich hin, das ein Image aus einem JLabel ausgelesen werden kann und in einem Container in einer Datei abgelegt werden kann?? NICHT als
Imagefile aller "bild.jpg". Beispielcode wäre ganz super ;)

Waxolunist
23-11-2006, 12:12
Wie wärs wenn du einfach von der Klasse BufferedImage eine eigene Klasse SerializableImage ableitest und selbst das Interface Serializable implementierst?

Hast du das schon versucht?

Jor
23-11-2006, 12:50
Danke für die Antwort. Ich bin mir jetzt nicht sicher, wie ich das umsetzen kann, aber es ist ein interessanter und für mich herausfordernder Tipp.
Bin noch nicht lang auf der Java-Schiene.:rolleyes: Ist aber keine Ausrede, deshalb nabei die Beschreibung von dem wie ich dich verstanden habe:
Ich mache eine neue Datenklasse vom Typ BufferedImage und an die klemme ich das Interface Serializable. Oder? Und da ich immer zwei Images zusammen abspeichern möchte, lege ich mir noch eine Datenklasse an, die zwei von den erstellten Objekten (Variablen) hat. Richtig?

Waxolunist
24-11-2006, 12:21
Ja, aber wenn du für das Abspeichern von den 2 Klassen keine besonderen Methoden brauchst, würde ich diese in einen Array oder eine Collection zusammenlegen.

Da du aber jetzt schon mehrere Fragen zu Images gestellt hast, und du mehr machen möchtest anscheinend als einfach nur images anzuzeigen, solltest du dir vielleicht einam JAI ansehen.

Jor
27-11-2006, 06:45
Naja, eigentlich möchte ich nicht viel mehr machen als kleine Images in einer Anwendung anzeigen, allerdings, möchte ich diese nur einmal einlesen aus einer bild.jpg - Datei und dann zur Wiederverwendung in einer HashMap/Collection bzw. später auch in einr Datenbank ablegen und von dort wieder einlesen. Wenn die Applikation an den Start geht, sollen die Images nur noch aus den o. g. Quellen zur Verfügung stehen, aber NICHT mehr aus einem File.
Ich habe bis jetzt kein passendes Beispiel im Netz oder Büchern gefunden, mit dem BufferedImage bin ich auch noch nicht wirlkich weitergekommen, bin auch noch relativer Java-Newbie.
Ich hatte gedacht, dass mein Wunsch einfacher umzusetzen ist. :confused:
Auf deinen Tipp hin mit JAI werde ich mich da auch mal umsehen, vielleicht kommt mir ja die Erleuchtung.;)
Wenn ich dich richtig verstanden habe, dann würdest du die Images in einem Array / einer Collection ablegen? Ich dachte das mit der Map wäre schon besser und schneller, oder?

Waxolunist
30-11-2006, 13:33
Nun eine Map ist ja auch eine Collection.

Bilder in DBs sind meiner Erfahrung nach auch nicht schneller als Files, da die Blobs ja auch auf die Platte geschrieben werden müssen.

Wenn du alles nur im Speicher halten möchtest, musst du aufpassen dass dir der Speicher nicht abhanden kommt.

Jor
09-12-2006, 10:56
In der Zwischenzeit habe ich den Code abgeändert und lese die Images wieder direkt von der Platte ein. Werde mir die Sache nochmal zu einem späteren Zeitpunkt "antuen" ;-).
Vielen Dank für eure Hilfe und die Tipps, besonderen Dank an Waxolunist.