ArrayList - Serialisierungs-Problem

O

Oneric

Gast
Hallo,
ich will gerade ein Save-System für ein kleines einfaches Java-Game schreiben. Dabei bin ich auf das Problem gestoßen, dass die Array-List, welche meine Entitys beinhaltet laut Compiler nicht serialisierbar ist:

Könnte mir jemand weiter helfen ? Ich hab echt keine Idde wie ich das Lösen sollte ???:L

Compilerfehler:

Code:
Caused by: java.io.NotSerializableException: net.MC_2D.src.EntityStrauss
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at java.util.ArrayList.writeObject(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at net.MC_2D.src.SaveManager.saveWorld(SaveManager.java:141)
	at net.MC_2D.src.GuiButton.tick(GuiButton.java:70)
	at net.MC_2D.src.Inventory.render(Inventory.java:180)
	at net.MC_2D.src.Component.render(Component.java:256)
	at net.MC_2D.src.Component.run(Component.java:282)
	... 1 more

Und hier die Save Methode:

Java:
try
		{
			
			/**
			 * 
			 * Entity
			 * 
			 * */
			FileOutputStream entFOS =  new FileOutputStream(entity);
			
			ObjectOutputStream entSchreiben = new ObjectOutputStream(entFOS);
			
			entSchreiben.writeObject(EntityList.mobs);
			
			entSchreiben.flush();
			entSchreiben.close();
			System.out.println("Entitys gespeichert");
		}catch (IOException e) {System.out.println("Failed to Load Entitys :( "); e.printStackTrace();}



Danke,

Oneric
 
O

Oneric

Gast
Laut der Exception java.io.NotSerializableException: net.MC_2D.src.EntityStrauss ist "EntityStrauss" nicht serialisierbar...

Hmm.., das is recht eindeutig.
Vielleicht war meine Frage etwas schlecht formuliert.
Ich wollte wissen ob ich evtl. etwas umstellen kann so dasss es serialisierbar wäre
oder
Welche andere Möglichkeiten mir offen stehen um die Mobs und ihre Position trotzdem speichern zu können.

Ich habe schon überlegt ob ich nicht eine Methode anlegen sollte wie:
Java:
createEntityByID(int ID, double posX, double posY)

So dass ich quasi eine ID habe, welche dann zusammen mit der Position gespeichert werden kann.



~Oneric
 
N

nillehammer

Gast
Wenn net.MC_2D.src.EntityStrauss eine von Dir selbst implementierte Klasse ist, mach sie einfach Serializable (
Code:
EntityStrauss implements Serializable
).
 
O

Oneric

Gast
Wenn net.MC_2D.src.EntityStrauss eine von Dir selbst implementierte Klasse ist, mach sie einfach Serializable (
Code:
EntityStrauss implements Serializable
).

Danke für die Antwort.
Ich hab Serializabel implementiert und auch eine SerialVersionUID angelegt.

Aber klappen tuts immer noch nicht. :(

Es gibt nun zwar keine Errors beim Speicher/ Laden, aber immer wenn ich eine Welt lade sind die Entitys verschwunden.

~Oneric
 
N

nillehammer

Gast
Es gibt nun zwar keine Errors beim Speicher/ Laden, aber immer wenn ich eine Welt lade sind die Entitys verschwunden.
Fehlersuche heißt, einen Ablauf Schritt für Schritt nachzuvollziehen und zu schauen, wo der Fehler passiert. Fangen wir jetzt mal damit an. Schau Dir mal die Datei an, in die du serialisierst. Die ist zwar etwas kryptisch, aber man kann grob erkennen, was da drinnen ist. Findest Du dort die serialisierten Entities? Ja--> die Deserialisierung funktioniert nicht, Nein--> Du hast nicht genau geschaut :D, Quatsch die Serialisierung funktioniert nicht. So kann man schonmal eingrenzen, in welchen Codestellen der Fehler zu suchen ist.
 
O

Oneric

Gast
Ok Danke für die Antworten.
Ich habe auch mal in die gespeicherte Datei geguckt, war aber für mich ziemlich nichtssagend da ich bisher eig. noch nie irgendetwas serialisiert habe.

ABer hir für euch mal der Inhlat:

Erst einmal die Entity-Klasse(EntityPig u. Strauuss erben von dieser):

Java:
package net.MC_2D.src;

import java.awt.Graphics;
import java.awt.Point;
import java.io.Serializable;
import java.util.Random;

public class Entity extends DoubleRectangle  implements Runnable, Serializable{
	

	/**
	 * 
	 */
	private static final long serialVersionUID = -8299087315495823627L;

	public int[] id;
	
	public double moveSpeed = 1;
	public double dir = 0;
	
	public double fallSpeed = 1.0;
	
	public boolean isGravity = true;
	
	public static boolean tryJumping = false;
	public double jumpSpeed = 1;
	
	public double jumpHeight = 40, jumpingCount = 0;
	
	public boolean isJumping = false;
	
	public int animation = 0;
	public int animationFrame = 0, animationTime = 20;
	
	public boolean isMoving;
	
	protected int animationSteps = 2;
	
	public static Random rand = new Random();
	
	protected boolean despawnAble = true;
	
	private boolean isRunning;

	public Entity(int x, int y, int width, int height, int[] id)
	{
		this.setBounds(x, y, width, height);
		
		this.id = id;
		
		isRunning = true;
		new Thread(this).start();
		
	}
	
	
	
	
	public void tick()
	{
		
		
		if(!isJumping && !isCollidingWithBlock(new Point((int)x + 1, (int)(y + height +1)), new Point((int)(x + width), (int)(y + height +1))) )
		{
			if(width > Tile.blockSize)
			{
				if(bigMobFallingX())
				{
					y +=fallSpeed;
				}
			}
			else
			{
				y +=fallSpeed;
			}
			
		}
		else
		{
			if(tryJumping && !Inventory.isOpen)
			{
				isJumping = true;
			}
		
			
			
				if(rand.nextInt(160) < 1)
				{
					isMoving = true;
					
					dir = moveSpeed + (2 * ( moveSpeed * (rand.nextInt(2) * -1)));
					
				}
				
				
				
				if(rand.nextInt(150) == 0)
				{
					isMoving = false;
				}
				
				if(rand.nextInt(100) == 0)
				{
					tryJumping = true;
				}
				
				if(rand.nextInt(20) == 0)
				{
					tryJumping = false;
				}
				
				if(!isMoving)
				{
					tryJumping = false;
				}
				
				
			}
		
			
			
			
			
		if(isJumping)
		{
			if(!isCollidingWithBlock(new Point((int)(x + 2), (int)y), new Point((int)(x + width - 2), (int)(y))))
			{
				if(jumpingCount <= jumpHeight)
				{
					y -= jumpSpeed;
					//Component.sY -= jumpSpeed;
					
					jumpingCount += 1;
				}
				else
				{
					isJumping = false;
					jumpingCount = 0;
				}
			}
			
			if(isCollidingWithBlock(new Point((int)(x +1), (int)y), new Point((int)(x + width ), (int)(y))))
			{
				isJumping = false;
				tryJumping = false;
			}
			
			
		}
			
			
		
		
		if(isMoving && !Inventory.isOpen)
		{
			boolean canMove = false;
			
			if(canFall())
			{
				canMove = true;
			}
			
			if(dir == moveSpeed)
			{
				canMove = !isCollidingWithBlock(new Point((int)(x + width), (int)(y)), new Point((int)(x + width + 1), (int)(y + (height - 2))));
			}
			else if(dir == -moveSpeed)
			{
				canMove = !isCollidingWithBlock(new Point((int)x - 1, (int)(y)), new Point((int)x - 1, (int)(y + (height - 2))));
			}
			
			
			if(animationFrame >= animationTime)
			{
				if(animation >= animationSteps)
				{
					animation = 1;
				}
				else
				{
					animation += 1;
				}
				
				
				animationFrame = 0;
			}
			else
			{
				animationFrame += 1;
			}
			
			if(canMove)
			{
				
					x += dir;
					
				
				
			}
			
		}
		
		else
		{
			animation = 0;
		}
		
		
		if(canDespawn() && !Component.isMenu)
		{
			isRunning = false;
			EntityList.mobs.remove(this);
		}	
			
			
	}
	
	
	public boolean isCollidingWithBlock(Point pt1, Point pt2)
	{
		
		
		for(int x = (int)(this.x/Tile.blockSize); x < (int)(this.x/Tile.blockSize + 3);  x++)
		{
			for(int y = (int)(this.y/Tile.blockSize); y < (int)(this.y/Tile.blockSize + 3);  y++)
			{
				if(x >= 0 && y >= 0 && x < Component.level.block.length && y < Component.level.block[0].length)
				//{
					if(Component.level.block[x][y].id != Tile.air && Component.level.block[x][y].id != Tile.ladder)
					{
						if(Component.level.block[x][y].contains(pt1) || Component.level.block[x][y].contains(pt2))
						{
							return true;
							
						}
					}
				//}
				
			}
		}
		
		
		
		return false;
		
	}
	
	
	
	public void render(Graphics g)
	{
		
		if(dir == moveSpeed)
		{
			g.drawImage(Tile.tile_terrain, (int)x - (int)Component.sX, (int)y - (int)Component.sY, (int)(x + width) - (int)Component.sX, (int)(y + height) - (int)Component.sY, /**/ this.id[0] * Tile.blockSize + ((int)width * animation), this.id[1] * Tile.blockSize, (this.id[0] * Tile.blockSize) + ((int)width * animation) + (int)width, this.id[1] * Tile.blockSize + (int)height, null);
		}
		else
		{
			g.drawImage(Tile.tile_terrain, (int)x - (int)Component.sX, (int)y - (int)Component.sY, (int)(x + width) - (int)Component.sX, (int)(y + height) - (int)Component.sY, /**/  this.id[0] * Tile.blockSize + ((int)width * animation) + (int)width, this.id[1] * Tile.blockSize, (this.id[0] * Tile.blockSize) + ((int)width * animation), this.id[1] * Tile.blockSize + (int)height, null);
		}
	}




	@Override
	public void run() {
		
		while(isRunning == true)
		{
			
			//render();
			
			
			try
			{
				tick();
				Thread.sleep(5);
			}
			catch(Exception ex){}
		}
		
	}
	
	public boolean canFall()
	{
		
		try{
			
			int newY = (int)((this.y/Tile.blockSize) + 2);
			
			
			int newX = (int)(this.x/Tile.blockSize);
			
			//  /Tile.blockSize
			
			if(Component.level.block[newX][newY].id == Tile.air)
			{
				return true;
			}
			
		}catch(Exception ex){}
		
		
		
		
		
		return false;
		
	}
	
	public boolean bigMobFallingX()
	{
		for(int i = Tile.blockSize; i < width; i += Tile.blockSize)
		{
			if(isCollidingWithBlock(new Point((int)(x + i), (int)(y + height)), new Point()))
			{
				return false;
			}
		}
		
		return true;
	}
	
	public boolean canDespawn()
	{
		//if(((this.x * Component.pixelSize * Tile.blockSize) - (Component.player.x * Component.pixelSize * Tile.blockSize) <= -900 || (this.x * Component.pixelSize * Tile.blockSize) - (Component.player.x * Component.pixelSize * Tile.blockSize) >= 1400) && despawnAble && rand.nextInt(4) == 0)
		//{
			//return true;
		//}
		
		return false;
	}

	
	
	
}


Der Entity.dat Inhalt ließ sich nicht so einfach kopieren daher hier ein Link:

entity.dat




Danke,

Oneric
 
S

SlaterB

Gast
der Code sagt nichts wirklich,
vielleicht machst du an der Stelle, an der du lädst, einen entscheidenden Fehler,

oder:
gehe im Fehlerfall immer auf Los zurück, beginne mit einer einfachen Klasse, ein int-Attribut, ein Objekt erstellen, Wert wählen, sichern, laden, klappt alles?
danach langsam erweitern, mehrere Attribute, mehrere Objekte in Liste usw.
 
O

Oneric

Gast
Ok hab das Problem gelöst :)

Entity erbt ja von meiner eigenen Klasse DuobleRectangle.
Ich habe Serializable nun einfach schon in DoubleRectangle implementiert und jetzt läufts. :)

Danke für eure Hilfe,

Oneric
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
GreenTeaYT Verständnisprobleme zur Arraylist Allgemeine Java-Themen 1
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
K ArrayList sortieren Allgemeine Java-Themen 16
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
S Mehrdimensionales ArrayList ins HashSet Allgemeine Java-Themen 10
C ArrayList Allgemeine Java-Themen 8
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
K Array in ArrayList Allgemeine Java-Themen 16
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
Paul15 Arraylist 2D Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
F ArrayList Allgemeine Java-Themen 11
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
R ArrayList und HashMap Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
Doopy ArrayList plötzlich leer Allgemeine Java-Themen 2
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L ArrayList Inhaltstyp. Allgemeine Java-Themen 5
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
J Arraylist speichern und laden? Allgemeine Java-Themen 5
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
M ArrayList<String> Frage Allgemeine Java-Themen 7
O ArrayList kaputt?! Allgemeine Java-Themen 5
M ArrayList<Foo> in ein Foo[] konvertieren? Allgemeine Java-Themen 8
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
M JTable + ArrayList Allgemeine Java-Themen 3
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4
S arraylist nach n. Eintrag numerisch Sortiren Allgemeine Java-Themen 5
O Problem beim Auslesen einer Arraylist von JComboBoxen Allgemeine Java-Themen 2
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
M Kovariante Rückgabewerte mit ArrayList Allgemeine Java-Themen 3
H LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ? Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
Maxim6394 Problem mit ArrayList Allgemeine Java-Themen 5
E Berechnung in Arraylist Allgemeine Java-Themen 10
E ArrayList mit unbekannter Größe Allgemeine Java-Themen 8
V Fork Join bei Arraylist Allgemeine Java-Themen 6
H Fehler in Arraylist Allgemeine Java-Themen 2
S Datensätze in eine ArrayList<Movie> speichern Allgemeine Java-Themen 13
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
J ArrayList-Problem Allgemeine Java-Themen 16
S Von einer ArrayList in die andere schreiben? Allgemeine Java-Themen 6
S ArrayList<JLabels> "malen" Allgemeine Java-Themen 4
E ArrayList in ArrayList, Referenzierungsproblem Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben