Probleme mit FileInputStream

Status
Nicht offen für weitere Antworten.

joschika77

Bekanntes Mitglied
Hi @all!

Hab ein Problem.Schreibe ein Objekt(JPanel) in eine Datei,was auch funktioniert.Nun lese ich diese wieder ein und möchte das eingelesene JPanel anzeigen.Aber leider ist nichts zu sehen.Ne Exception schmeißt er auch nicht. Soll so ne Art Paint sein,wo ich das Gemalte speichern & wieder auslesen kann. Woran kann das liegen? Hier ein wenig Code?

Code:
		if(e.getActionCommand().equalsIgnoreCase("Laden...")){
			
			FileInputStream filein;
			ObjectInputStream in;
			try
			{
				filein = new FileInputStream("zeichnen.dat");
				in = new ObjectInputStream(filein);
				
				//if(in.readObject() instanceof JPanel)
					pp = (PaintPanel)in.readObject();
					
				in.close();
				filein.close();
			}catch(Exception a)
			{
				JOptionPane.showMessageDialog(this,"Nicht geladen!\n"+a);
			}
			this.repaint();
		}
		
		if(e.getActionCommand().equalsIgnoreCase("Speichern...")){
			
			FileOutputStream fileout;
			ObjectOutputStream out;
			vecPanel.add(pp);
			
			try
			{
				fileout = new FileOutputStream("zeichnen.dat");
			    out = new ObjectOutputStream(fileout);
			    //out.writeObject(pp);
			    
			    for(int i=0; i<vecPanel.size(); i++)
			    	out.writeObject(vecPanel.elementAt(i));
			    
			    out.close();
			    fileout.close();
			}catch(IOException b)
			{
				JOptionPane.showMessageDialog(this,"Nicht gespeichert!\n"+b);
			}catch(Exception a)
			{
				JOptionPane.showMessageDialog(this,"Nicht gespeichert!\n"+a);
			}
		}
 
Im Moment schreibst du beim Speichern vecPanel elementweise aus (du schreibts also mehrere Objekte). Beim Lesen wird aber nur ein Objekt (pp) gelesen. Das scheint schon nicht ganz konsistent zu sein.
 
Erstmal danke für die Antwort. Ne ne im Vector ist erstmal nur ein Panel-Element drin.Bin mit dem Debugger durchgegangen.Die for Schleife könnte theoretisch erstmal weg.Das kanns eigentlich nicht sein. Die Datei findet er offensichtlich auch.Drin steht auch was:

Code:
’ sr 
PaintPanel        Z malenZ radierenL pointt Ljava/awt/Point;xr javax.swing.JPanel]D
„™B$  xr javax.swing.JComponentmâFB*75! Z aaTextF 
alignmentXF 
alignmentYZ autoscrollsI flagsZ isAlignmentXSetZ isAlignmentYSetZ verifyInputWhenFocusTargetL accessibleContextt 'Ljavax/accessibility/AccessibleContext;L 	actionMapt Ljavax/swing/ActionMap;L ancestorInputMapt Ljavax/swing/InputMap;L bordert Ljavax/swing/border/Border;L 
focusInputMapq ~ L 
inputVerifiert Ljavax/swing/InputVerifier;L listenerListt %Ljavax/swing/event/EventListenerList;L 	popupMenut Ljavax/swing/JPopupMenu;L vetoableChangeSupportt "Ljava/beans/VetoableChangeSupport;L windowInputMapt Ljavax/swing/ComponentInputMap;xr java.awt.Container@€sý' I containerSerializedDataVersionZ focusCycleRootZ focusTraversalPolicyProviderI ncomponents[ 	componentt [Ljava/awt/Component;L 
dispatchert  Ljava/awt/LightweightDispatcher;L 	layoutMgrt Ljava/awt/LayoutManager;L maxSizet Ljava/awt/Dimension;xr java.awt.Component•ê¦Y×<¤š #I boundsOpI componentSerializedDataVersionZ enabledJ 	eventMaskZ focusTraversalKeysEnabledZ 	focusableI heightZ 
ignoreRepaintI isFocusTraversableOverriddenZ isPackedZ 
maxSizeSetZ 
minSizeSetZ nameExplicitlySetZ 
newEventsOnlyZ prefSizeSetZ validZ visibleI widthI xI yL accessibleContextq ~ L 
backgroundt Ljava/awt/Color;L 
changeSupportt "Ljava/beans/PropertyChangeSupport;L cursort Ljava/awt/Cursor;L 
dropTargett Ljava/awt/dnd/DropTarget;[ focusTraversalKeyst [Ljava/util/Set;L fontt Ljava/awt/Font;L 
foregroundq ~ L localet Ljava/util/Locale;L maxSizeq ~ L minSizeq ~ L namet Ljava/lang/String;L peerFontq ~ L popupst Ljava/util/Vector;L prefSizeq ~ xp              &            v   –   
psr java.awt.Color¥ƒ3u F falphaI valueL cst Ljava/awt/color/ColorSpace;[ 	frgbvaluet [F[ fvalueq ~ xp    ÿÿÿÿpppppppsr javax.swing.plaf.FontUIResourceBćÁ"‹G  xr 
java.awt.FontÅ¡5æÌÞVs I fontSerializedDataVersionF 	pointSizeI sizeI styleL fRequestedAttributest Ljava/util/Hashtable;L nameq ~ xp   A@         pt Dialogxsr sun.swing.PrintColorUIResourceí<º
îx L 
printColorq ~ xr  javax.swing.plaf.ColorUIResourcekSùŸòêæ’  xq ~     ÿ333pppsq ~     ÿ   pppsr java.util.Locale~ø`œ0ùì I hashcodeL countryq ~ L languageq ~ L variantq ~ xpÿÿÿÿt DEt det  pppq ~ $ppt mouseLq ~ t mouseMotionLq ~ psr java.awt.ComponentOrientationÆê§E¡œcÌ I orientationxp   ppx         ur [Ljava.awt.Component;‰
æªu  xp    psr java.awt.FlowLayout›6K[ù9 I alignI hgapI newAlignI serialVersionOnStreamI vgapxp               pppx            @	  ppppppsr #javax.swing.event.EventListenerList±6Æ}„êÖD  xppxpppw    xx  sr java.awt.Point¶ÄŠr4~È& I xI yxp  b  Õ

Weiß auch nicht. repaint() mach ich auch. Das Panel liegt auf dem JFrame.Nur zur Info.
 
Es dürfte aber nicht reichen, beim Lesen einfach nur die Variable pp neu zuzuweisen; damit wird sich im Container (JFrame) noch nichts geändert haben (pp war ja nur eine Referenz auf ein Objekt im Frame; durch das erneute Zuweisen zeigt die Variable eben woanders hin, aber für den Frame und dessen Inhalt ist das irrelevant).
 
Hab mal getestet & er scheint mit
Code:
 pp = (PaintPanel)in.readObject();
nicht klarzukommen.Hatte das nämlich so:
Code:
					pp = new PaintPanel(this);
					pp = (PaintPanel)in.readObject();
					pp.setBounds(150,10,630,550);
					this.add(pp);
Und da hat er gar nix angezeigt.Kommentiere ich die 2. Zeile aus, ist das Panel sichtbar.
Aber wie sage ich ihm dann das er das Gespeicherte dort zeichnet?

MfG Ronnsen
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben