Read / write Problem beim ByteStrom

MarioK

Aktives Mitglied
Hallo Gemeinschaft,
heute liegt mein Problem beim auslesen eines ByteStromes. Nachdem es mit .xml Dateien funktioniert (das schreiben und wieder auslesen) möchte ich jetzt, dass wenn der Benutzer auf der Zeichenfläche Kreise zeichnet und anschließen "save" auswählt, dass die Kreise in einer Datei, hier benannt als tabelle, gespeichert werden (ob meine Methode dazu funktioniert weiss ich noch nicht, da ich das auslesen noch nicht hinbekommen habe). Wählt der Benutzer im Anschluss "open" aus und er wählt die Datei "tabelle", dann sollen die Kreise wieder auf der Zeichenfläche erscheinen, sprich setze die Daten aus der Datei wieder zurück in die
Code:
ArrayList<Point> kreise
.

"open" - Zeile 294 - 354
"save" - Zeile 373 - 434

Ich möchte nicht alle Fehler hier posten aber die beiden wichtigsten hier (die Fehler bekommen ich, wenn ich open auswähle und die Datei tabelle wähle):
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.Point cannot be cast to java.util.ArrayList
	at PflichtAufgabe3.MyGraphEditor$MenuAktion.actionPerformed(MyGraphEditor.java:336)

Java:
import java.awt.Point;
import java.io.Serializable;

public class SerializableObject implements Serializable {

	private static final long serialVersionUID = -1874439687037684460L;
	
	private Point point;
	
	public String toString() {
		return "Punkt: " + point;
	}
	
	/*SerializableObject(String n, int a) {
		name = n;
		anzahl = a;
	}*/

	public SerializableObject(Point point) {
		
		this.point = point;
		
	}

}

und

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.*;

import java.util.ArrayList;
import java.util.Iterator;
 
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;
import javax.swing.plaf.FileChooserUI;
import javax.xml.bind.JAXBException;
  
/**
 * Dieses Programm stellt dem Benutzer eine grafische Benutzeroberfläche zur
 * Verfügung, womit dieser auf einer Zeichenfläche Punkte (Kreise) zeichnen,
 * löschen und verschieben kann. Dabei kann der Benutzer die Interaktionen
 * aus ein Menu wählen.
 * 
 * @author Mario Krüger
 * Matrikelnummer 768573
 * Version: 14.06.2011
 *
 */
public class MyGraphEditor extends JFrame{

	private static final long serialVersionUID = 2819070241694183052L;
	
	// Variablen initialisieren
    private final PunktVerarbeiten zeichnenFenster = new PunktVerarbeiten();
    private boolean insertPoint 	= false;
    private boolean deletePoint 	= false;
    private boolean movePoint 		= false;
    @SuppressWarnings("unused")
	private boolean nonePoint 		= false;
    @SuppressWarnings("unused")
	private boolean openP 			= false;
    @SuppressWarnings("unused")
	private boolean newP 			= false;
    @SuppressWarnings("unused")
	private boolean saveP 			= false;
    private boolean correctPoint 	= false;
    
    private ArrayList<Point> kreise;
    Point ls1;
    Point ls2;
    Point ls3;
    
    //File tabelle = new File("data/Tabelle");
	
    final int radius = 10;
    private final JMenuBar mb;
    private final JMenu graph, vertex; 
    private final JMenuItem open, neu, save, insert, move, delete, none;

    JLabel label;
    JTextField text;    
    
    // Kontruktor erstellen
    public MyGraphEditor(){
    	
        final JFrame frame = new JFrame("MyGraphEditor"); 
        
        // Menu erstellen
        mb = new JMenuBar();
        
        // Menuitem Graph erstellen
        graph = new JMenu("Graph");
 
        open = new JMenuItem("open");
        open.addActionListener(new MenuAktion());
        graph.add(open);
        graph.addSeparator();
 
        neu = new JMenuItem("new");
        neu.addActionListener(new MenuAktion());
        graph.add(neu);
        graph.addSeparator();
        
        save = new JMenuItem("save");
        save.addActionListener(new MenuAktion());
        graph.add(save);
        graph.addSeparator();
        
        // Menuitem Vertex erstellen
        vertex = new JMenu("Vertex");
 
        insert = new JMenuItem("insert");
        insert.addActionListener(new MenuAktion());
        vertex.add(insert);
        vertex.addSeparator();
 
        delete = new JMenuItem("delete");
        delete.addActionListener(new MenuAktion());
        vertex.add(delete);
        vertex.addSeparator();
        
        move = new JMenuItem("move");
        move.addActionListener(new MenuAktion());
        vertex.add(move);
        vertex.addSeparator();
        
        none = new JMenuItem("none");
        none.addActionListener(new MenuAktion());
        vertex.add(none);

        mb.add(graph);
        mb.add(vertex);
        
        // Panel + Label + Textfeld erstellen
        final JPanel panel = new JPanel(new FlowLayout());
        text = new JTextField("none", 20);
        text.setEditable(false);
        label = new JLabel("Selected Action");       
        panel.add(label);
        panel.add(text);
        
        // Frame zusammenstellen
        frame.setJMenuBar(mb);
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        zeichnenFenster.setPreferredSize(new Dimension(800,500));
        frame.add(zeichnenFenster,BorderLayout.CENTER);
        frame.add(panel,BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
                
        //mit dieser Methode wird der JFileChooser erweitert
        //um einen Filter für .xml Dateien
        
    }
	
    
    class XMLFileFilter extends FileFilter{
    	
    	public boolean accept(File file) {
			
    		if(file.getName().toLowerCase().endsWith(".xml") || file.isDirectory()){
    			return true;
    		}
    		return false;
    		/*if (file.isDirectory()) return true;
			return file.getName().toLowerCase().endsWith(".xml");*/
    		
		}

		public String getDescription() {
			return ".xml";
		}
    	
    }
    
    /**
     * Diese Klasse zeichnet die Punkte (Kreise) und legt die 
     * Mausinteraktionen fest.
     *
     */
    class PunktVerarbeiten extends JComponent implements MouseListener{
	
		private static final long serialVersionUID = -7292895371227480384L;
		
		// Kontruktor erstellen.
		public PunktVerarbeiten() {
			
    		kreise = new ArrayList<Point>();
    		addMouseListener(this) ;
    		
    	}
    	
		// Festlegen der Zeichenflächenfarbe, der Punktfarbe und zeichnen 
		// der Kreise.
    	@Override
    	protected void paintComponent(final Graphics g) {
    		
    		super.paintComponent(g);
    		final Graphics2D g2D = (Graphics2D) g;
    		g2D.setColor(Color.white);
    		g2D.fillRect(0,0,getWidth(), getHeight());
    		g2D.setColor(Color.black);
    		g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
    				RenderingHints.VALUE_ANTIALIAS_ON);
    		for (final Point p : kreise){
    			g2D.fillOval(p.x-10/2, p.y-10/2, radius, radius);
    		}
    		
    	}
    	
    	// festlegen der Mausinteraktionen
    	public void mouseClicked(final MouseEvent e) {
        	
    		// wenn insert aus dem Menu erwählt wurde, dann wird in der 
    		// Zeichenfläche beim Klick ein Punkt gezeichnet und 
    		// gleichzeitig werden die Koordinaten der ArrayList kreise 
    		// hinzugefügt.
            if (insertPoint == true){
            	ls1 = e.getPoint();
            	kreise.add(ls1);
                repaint();
            }
            
            // wenn delete aus dem Menu erwählt wurde, dann wird beim 
            // Klick auf die Zeichenfläche überprüft, ob der Klick in 
            // der Nähe eines Punktes ist. Wenn der Klick innerhalb 
            // eines Punktes, wird dieser gelöscht, parallel zum 
            // Löschen aus der ArrayList kreise.
            else if (deletePoint){
                ls1 = e.getPoint();
                for(final Iterator<Point> iterator = kreise.iterator(); 
                		iterator.hasNext();){
                	final Point p = iterator.next();
                	ls2 = e.getPoint();
                	if(p.distance(ls2) <= (radius/2)){
                		iterator.remove();
                		repaint();
                	}
                }
            }
                         
        }

		public void mousePressed(final MouseEvent e) {
			
			// wenn move aus dem Menu erwählt wurde, dann wird beim 
			// Maus gedrückt halten, die Koordinate vom dem zu 
			// versetzenden Kreis gespeichert, wenn der Klick
			// innerhalb eines Kreise liegt.
			if(movePoint){
				ls1 = e.getPoint();
                for(final Iterator<Point> iterator = kreise.iterator(); 
                		iterator.hasNext();){
                	final Point p = iterator.next();
                	ls2 = e.getPoint();
                	if(p.distance(ls2) <= (radius/2)){                		
                		ls3 = p;
                		movePoint = true;
                		correctPoint = true;
                	}
                }
			}
			
		}
		
		public void mouseReleased(final MouseEvent e) {
			
			// wenn move aus dem Menu erwählt wurde, dann wird beim 
			// Maus loslassen der Punkt versetzt, wenn MousePressed 
			// positiv abgeschlossen wurde, gleichzeitig wird der 
			// ArrayList kreise die Koordinaten des Punktes 
			// hinzugefügt und die alten Werte des Punktes gelöscht.
			if(movePoint & correctPoint){
				ls1 = e.getPoint();
				kreise.add(ls1);
				kreise.remove(ls3);
				correctPoint = false;
				repaint();			
			}
			
		}

		public void mouseEntered(final MouseEvent e) {}	
		public void mouseExited(final MouseEvent e) {}
    	
    }

	/**
	 * Diese Klasse setzt die Parameter für die Menuauswahl und setzt
	 * den Text im JTextField.
	 *
	 */
	class MenuAktion implements ActionListener {
		
		@Override
		public void actionPerformed(final ActionEvent e) {
			
			// bei Menuauswahl open, Paramter neu setzen
			if (e.getActionCommand() == open.getText()) {
				insertPoint = false;
				deletePoint = false;
				movePoint 	= false;
				nonePoint 	= false;
				openP 		= true;
				newP 		= false;
				saveP 		= false;
				text.setText("Graph:" + e.getActionCommand()); 
				
				kreise = new ArrayList<Point>();
				final JFileChooser jfc = new JFileChooser();
				XMLFileFilter xmlFileFilter = new XMLFileFilter();
		        jfc.setFileFilter(xmlFileFilter);
				if (jfc.showOpenDialog(open) == JFileChooser.APPROVE_OPTION) {
					File file = jfc.getSelectedFile();
					/*PunkteXMLWrite meineDB = new PunkteXMLWrite();
					try {
						kreise = meineDB.readPunkteToXML(file).getKreise();
						zeichnenFenster.repaint();
					} catch (JAXBException e1) {
						e1.printStackTrace();
						System.out.println("Fehler Einlesen");
					}
				}*/
				
					
					FileInputStream fis = null;
					try {
						fis = new FileInputStream(file);
					} catch (FileNotFoundException e2) {
						// TODO Auto-generated catch block
						e2.printStackTrace();
					}
					ObjectInputStream ois = null;
					try {
						ois = new ObjectInputStream(fis);
					} catch (IOException e2) {
						// TODO Auto-generated catch block
						e2.printStackTrace();
					}
					try {
						kreise = (ArrayList<Point>) ois.readObject();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (ClassNotFoundException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					System.out.println(ois);
					try {
						ois.close();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
				
				
			}
			
			// bei Menuauswahl new, Paramter neu setzen
			else if (e.getActionCommand() == neu.getText()) {
				insertPoint = false;
				deletePoint = false;
				movePoint 	= false;
				nonePoint 	= false;
				openP 		= false;
				newP 		= true;
				saveP 		= false;
				text.setText("Graph:" + e.getActionCommand());
				//ArrayList<Punkt>kreise = (ArrayList) circle;
				//System.out.println(kreise);
				kreise.clear();
				zeichnenFenster.repaint();			
			}
			
			// bei Menuauswahl save, Paramter neu setzen
			else if (e.getActionCommand() == save.getText()){
				insertPoint = false;
				deletePoint = false;
				movePoint 	= false;
				nonePoint 	= false;
				openP 		= false;
				newP 		= false;
				saveP 		= true;
				text.setText("Graph:" + e.getActionCommand());
				
				
				final JFileChooser jfc = new JFileChooser();
				XMLFileFilter xmlFileFilter = new XMLFileFilter();
		        jfc.setFileFilter(xmlFileFilter);
				if (jfc.showSaveDialog(save) == JFileChooser.APPROVE_OPTION) {
					
					
					/*PunkteToXML meinePunkte = new PunkteToXML(kreise);
					PunkteXMLWrite meineDB = new PunkteXMLWrite();						
					try {
						File file = jfc.getSelectedFile();
						//wenn der Benutzer keine Dateiendung oder eine falsche
						//angibt, wird .xml angehängt
						if(!xmlFileFilter.accept(file)){
							String path = jfc.getSelectedFile().getPath();
							path = path + ".xml";
							file = new File(path);
						}
						meineDB.writePunkteToXML(meinePunkte, file);
					} catch (JAXBException e1) {
						e1.printStackTrace();
						System.out.println("Fehler Auslesen");
					}																	
				}*/
			
				FileOutputStream fos;
				ObjectOutputStream oos = null;
				File tabelle = new File("Tabelle");
				try {
					fos = new FileOutputStream(tabelle);
					oos = new ObjectOutputStream(fos);
				} catch (FileNotFoundException e2) {
					e2.printStackTrace();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
				
				for (int i=0; i<kreise.size(); i++){
					try {
						oos.writeObject(kreise.get(i));
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
				
				try {
					oos.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}}						
			
			}
			
			// bei Menuauswahl insert, Paramter neu setzen
			else if (e.getActionCommand() == insert.getText()){
				insertPoint = true;
				deletePoint = false;
				movePoint 	= false;
				nonePoint 	= false;
				openP 		= false;
				newP 		= false;
				saveP 		= false;
				text.setText("Vertex:" + e.getActionCommand());
			}
			
			// bei Menuauswahl delete, Paramter neu setzen
			else if (e.getActionCommand() == delete.getText()){
				insertPoint = false;
				deletePoint = true;
				movePoint 	= false;
				nonePoint 	= false;
				openP 		= false;
				newP 		= false;
				saveP 		= false;
				text.setText("Vertex:" + e.getActionCommand());          
			}
			
			// bei Menuauswahl move, Paramter neu setzen
			else if (e.getActionCommand() == move.getText()){
				insertPoint = false;
				deletePoint = false;
				movePoint 	= true;
				nonePoint 	= false;
				openP 		= false;
				newP 		= false;
				saveP 		= false;
				text.setText("Vertex:" + e.getActionCommand());
			}
			
			// bei Menuauswahl none, Paramter neu setzen
			else if (e.getActionCommand() == none.getText()){
				insertPoint = false;
				deletePoint = false;
				movePoint 	= false;
				nonePoint 	= true;
				openP 		= false;
				newP 		= false;
				saveP 		= false;
				text.setText("none");
			}

		}

	}
	
	/**
	 * MyGraphEditor starten
	 * @param args ignoriert
	 */
	public static void main(final String[] args){
    	
        new MyGraphEditor();
        
    }
	
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
500 Zeilen Code, dabei so einfach,
du versuchst eine Liste zu lesen, vorher hast du aber keine Liste gespeichert sondern jeden Punkt einzeln

-> speichere nicht per Schleife jeden Punkt einzeln sondern nur genau das Listen-Objekt..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M XML read Problem XML & JSON 4
M XML write Problem zweiter Ansatz XML & JSON 3
M XML write Problem XML & JSON 2
O XPATH Problem - Anfänger XML & JSON 4
so_ein_Komischer Problem mit Clean and Build XML & JSON 1
P JAXB-Problem XML & JSON 1
W Problem mit dem mit XML sortierung XML & JSON 2
S Jaxb Unmarshalling Problem XML & JSON 4
E einfaches Problem XML + XSD + jedit XML & JSON 2
S Xslt Problem XML & JSON 2
B JasperReport Problem in Runtime XML & JSON 2
S Problem with JAXB unmarshalling classes that have the same name in @XmlRootElement XML & JSON 2
R Problem bei: XML und XSL zu HTML XML & JSON 2
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
M XML Unicode Problem XML & JSON 2
S XJC --> Java-Objects compile Problem XML & JSON 4
F XPath-Problem mit DOM4J XML & JSON 8
B JPA + JAXB Mapping Problem XML & JSON 2
T XPath Problem: finden einer Node nach Attributswert XML & JSON 2
G Problem beim schreiben von XML in eine File XML & JSON 2
S Encoding Problem XML & JSON 7
K JAXB und Maps -> Marshalling-Problem XML & JSON 6
B Problem beim löschen von ChildNodes aus einem XML-DOM XML & JSON 3
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
M JExcelAPI (JXL) Encoding Problem XML & JSON 11
S DOM Parsen Problem mit HTML Sonderzeichen XML & JSON 4
A aus xml --> html Problem XML & JSON 3
Y stax Problem XML & JSON 3
slawaweis Problem mit XSLT (wahrscheinlich ein Bug in Java 6) XML & JSON 16
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
P XPath Problem XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
M Problem mit FOP in Java Programm XML & JSON 2
S Problem mit XPath XML & JSON 4
J Problem mit compile einer XSD XML & JSON 3
N jdom problem beim lesen von child elementen XML & JSON 5
N problem bei xml lesen mit jdom XML & JSON 2
A XPath Problem XML & JSON 2
W JDOM element ändern funzt nich :( [problem gelöst] XML & JSON 3
G Problem mit XML-Schema Validierung mit Java XML & JSON 12
B jdom: getChildren() problem XML & JSON 4
H XSL-FO Problem mit If XML & JSON 2
loadbrain XPath Problem XML & JSON 2
T addContent / Problem mit Variable XML & JSON 2
F Problem mit JAXB Unmarshaller XML & JSON 2
F JDOM und XPath - Problem mit Namespace ohne Prefix XML & JSON 5
8 SAXParser Problem, startElement wird nicht ausgeführt XML & JSON 2
M Java und XSLT: Performanz-Problem XML & JSON 5
X JDOM SAXBuilder Validationschema - Problem XML & JSON 8
G Problem mit getContent XML & JSON 4
K stax problem XML & JSON 2
S Problem mit SAX XML & JSON 6
A Problem mit JasperReport XML & JSON 6
G DOCTYPE Problem beim Transformer/TransformerFactory etc. XML & JSON 13
C XSD Problem XML & JSON 16
R Problem bei Erstellung von XML(JDOM) XML & JSON 3
R Problem mit SAX-Parser characters() XML & JSON 7
M XPath Problem im Zusammenhang mit document() XML & JSON 2
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
Z Problem mit getNodeValue() und setNodeValue() in DOM XML & JSON 6
H JAXB CUSTOMIZATION PROBLEM XML & JSON 2
M XPATH und RSS (Problem namespaces) XML & JSON 7
P SAXParser problem? XML & JSON 2
S Problem beim Erstellen eines pdfs XML & JSON 3
V Problem mit xsd XML & JSON 2
P XML mit hilfe von JDOM abspeichern macht Problem XML & JSON 6
G Problem mit addContent() XML & JSON 4
B DTD Problem - Reihenfolge der Einträge XML & JSON 2
R Problem beim Auslesen von Attributen XML & JSON 4
K Problem mit ant/java web services XML & JSON 4
K xml Datei mit JDOM erzeugen, Problem Namespaces XML & JSON 1
P Problem mit XML und DOM XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben