Swing NullPointerException und JXImageView

Groeg

Mitglied
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:
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
 
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at gui.NeuePflanze$3.mouseClicked(NeuePflanze.java:166)

Hat jemand eine Idee?

Oben steht die Fehlermeldung und die Datei inkl. Zeile wo der Fehler passiert!
Eines der Objekte welches du verwendest ist nicht initialisiert! Daher die NullPointerException.

Mit dem vorhandenen Code kann ich leider nicht erkennen um welche Zeile es sich genau handelt wo die Exception fliegt und auch nicht warum.
 
Also dann wird einer der getter null sein.
Code:
System.out.println();
sollte abhilfe schaffen.
 
ich hab die o.g. Klasse mit dem Event-Handler nochmals in NetBeans geschrieben. Jetzt funktioniert das ganze.
Ich kann nur den Fehler gerade nicht reproduzieren.
 

Neue Themen


Zurück
Oben