Hallo zusammen!
Ich bin gerade dabei ein kleines Programm zu schreiben, mit dem man jeweils vier Bilder einer Pflanze und den dazugehörigem deutschen und botanischem Namen speichern kann, und dann in den Quizmodus gehen kann um die richtigen Namen einzugeben.
Als probate Lösung für die Bilder scheint mir das JXimageView-Widget aus SwingX-1.4.6, da es wunderbar mit Drag&Drop funktioniert.
Um die Daten auf die Platte zu packen will ich mit ObjectOutputStream arbeiten, also ganze Objekte in eine Datei speichern.
Ich bin jetzt so weit, dass ich ein Fenster habe, mit dem ich nach o.g. Schema eine Pflanze anlegen kann. Wenn ich auf "Speichern" klicke bekomme ich dann eine NullpointerException:
Hier noch der Event-Handler, der das Speichern auslösen soll:
und die Klasse, deren Objekte serialisiert und gespeichert werden sollen:
Hat jemand eine Idee?
Ich danke euch!
Grüße,
Georg
Ich bin gerade dabei ein kleines Programm zu schreiben, mit dem man jeweils vier Bilder einer Pflanze und den dazugehörigem deutschen und botanischem Namen speichern kann, und dann in den Quizmodus gehen kann um die richtigen Namen einzugeben.
Als probate Lösung für die Bilder scheint mir das JXimageView-Widget aus SwingX-1.4.6, da es wunderbar mit Drag&Drop funktioniert.
Um die Daten auf die Platte zu packen will ich mit ObjectOutputStream arbeiten, also ganze Objekte in eine Datei speichern.
Ich bin jetzt so weit, dass ich ein Fenster habe, mit dem ich nach o.g. Schema eine Pflanze anlegen kann. Wenn ich auf "Speichern" klicke bekomme ich dann eine NullpointerException:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at gui.NeuePflanze$3.mouseClicked(NeuePflanze.java:166)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6528)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Hier noch der Event-Handler, der das Speichern auslösen soll:
Java:
JButton btnSaveEnd = new JButton("Speichern & Ende");
btnSaveEnd.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
try {
Pflanze currentPflanze = new Pflanze(textNameLatein.getText(), textNameDeutsch.getText(), bildContainer1.getImage(), bildContainer2.getImage(), bildContainer3.getImage(), bildContainer4.getImage());
currentPflanze.PflanzeSpeichern();
dispose();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}});
und die Klasse, deren Objekte serialisiert und gespeichert werden sollen:
Java:
import java.awt.Image;
import java.io.*;
public class Pflanze extends ObjectOutputStream implements Serializable {
@Override
protected void writeStreamHeader() throws IOException {
reset();
}
private String nameBotanisch, nameDeutsch;
private Image bild1, bild2, bild3, bild4;
public Pflanze(String nameBotanisch, String nameDeutsch, Image bild1, Image bild2, Image bild3, Image bild4) throws IOException {
this.nameBotanisch = nameBotanisch;
this.nameDeutsch = nameDeutsch;
this.bild1 = bild1;
this.bild2 = bild2;
this.bild3 = bild3;
this.bild4 = bild4;
}
public void PflanzeSpeichern() {
FileOutputStream streamspeichern = null;
ObjectOutputStream o = null;
try
{
streamspeichern = new FileOutputStream( "daten.ser" );
o = new ObjectOutputStream( streamspeichern );
o.writeObject( this );
}
catch ( IOException e ) { System.err.println( e ); }
finally { try { o.close(); } catch ( Exception e ) { e.printStackTrace(); } }
try { streamspeichern.close(); } catch ( Exception e ) { e.printStackTrace(); }
}
public Pflanze PflanzeLaden() {
Pflanze currentPflanze = null;
Object currentObject = null;
FileInputStream streamladen = null;
ObjectInputStream i = null;
try
{
streamladen = new FileInputStream( "daten.ser" );
i = new ObjectInputStream(streamladen);
try {
currentObject = i.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (currentObject instanceof Pflanze) {
currentPflanze = (Pflanze)currentObject;
}
}
catch ( IOException e ) { System.err.println( e ); }
finally { try { i.close(); } catch ( Exception e ) { e.printStackTrace(); } }
try { streamladen.close(); } catch ( Exception e ) { e.printStackTrace(); }
return currentPflanze;
}
}
Hat jemand eine Idee?
Ich danke euch!
Grüße,
Georg