Vector überschreibt Elemente bei add()-Methode

Memorius

Mitglied
Hallo zusammen, dies ist mein erster Beitrag hier.

Ich habe folgendes Problem: Ich habe einen Vector, in den ich Elemente schreiben will. Das mache ich mit .add() . Jetzt ist es aber so, dass er alte Elemente plötzlich überschreibt, was er bei add() bzw. addElement() nicht tun sollte.

Java:
entVec.addElement(new Player(player.getX(), player.getY(), this));

Das ganze gehört zu einem Game, ich kann wörtlich dabei zuschauen, wie Elemente verschwinden, wenn ich die addElement()-Methode aufrufe.

Danke im Voraus!
 
G

Gast2

Gast
An der einen Zeile wird definitv nicht liegen.
Code:
addElement
überschreibt nichts.
 
S

SlaterB

Gast
vielleicht sind die Attribute in Player statisch, dann kann es eh nur insgesamt eine Positionen für alle Player geben,
wobei Werte aus altem Player nicht gerade ein Problem sein sollten, wären ja dieselben ;)

poste doch wenigstens mal diese Klasse
 

Memorius

Mitglied
Wow, kommen hier schnell Antworten, danke! :)

Es ist schwierig, zu entscheiden was hier relevant ist, da es mittlerweile schon so viel Code ist. Also zu Beginn wird der Vector mit den Elementen gefüllt, da funktioniert alles richtig. Jetzt wollte ich einfach mal aus Testgründen mehrere "Figuren" in der Welt platzieren, einfach da wo ich gerade stehe. Dazu erstelle ich einfach einen neuen "Player", was eigentlich nichts machen sollte, beim Player ist nix statisch und die Kontrolle der Figur läuft über eine Referenz die eh nur auf dem ersten Player bleibt.

Java:
public void keyPressed(KeyEvent e) {

		switch (e.getKeyCode()) {
		case KeyEvent.VK_LEFT:
			player.goLeft(true);
			break;
		case KeyEvent.VK_RIGHT:
			player.goRight(true);
			break;
		case KeyEvent.VK_UP:
			player.goUp(true);
			break;
		case KeyEvent.VK_DOWN:
			player.goDown(true);
			break;
		case KeyEvent.VK_F1:
			switchDev();
			break;
		case KeyEvent.VK_F12:
			printInfo();
			break;
		case KeyEvent.VK_SPACE:
			entVec.addElement(new Player(player.getX(), player.getY(), this));
			break;
		}

Das Ganze läuft mit Swing und wird von nem Thread aus animiert. Swing hat angeblich so einige Eigenheiten, kann es damit zusammenhängen? Dass das keyPressed-Event und das Swing-Zeug nicht richtig zusammenspielt?

new Player() macht nichts, was den Vector irritieren könnte, würde ich mal sagen.

Java:
public Player(double initX, double initY, Board b) {
		super(initX, initY, b);

		Img[] images = { b.imgP_Front_Stand };
		super.setImages(images);
	}
 
S

SlaterB

Gast
wovon erbt Player?

wie genau wirkt sich das 'überschreiben' oder 'verschwinden' aus?
hast du selber paint-Methoden, die dann was anderes zeichnen?
logge dort was warum gezeichnet wird, was sieht diese paint-Methode, welche Player im Vector mit welchen Positionen usw.,
Vorher/ Nachher-Vergleiche
 

Memorius

Mitglied
Der Player erbt von Drawable, das erbt von Entity - alles selbst geschriebene Klassen.

In entVec sind alle Level Elemente (im Moment nur Wände) und eben der Player, bzw. mehrere Player wobei die anderen nichts machen außer rumstehen. Ich zeichne über die paint(Graphics g) Methode, die ich von JPanel überschreibe. Ich sehe also die Wände im Spiel und habe außerdem eine Anzeige eingebaut, die mir zu jeder Zeit entVec.size() ausgibt. Zum Start sind da 116 Elemente drin. Wenn ich nun die Leertaste drücke erscheint an der Stelle, wo ich stehe, ein weiterer Player. Es ist dann anscheinend immer Zufall, ob entVec.size() sich um 1 erhöht - wie es ja sein soll - oder die Zahl gleichbleibt und stattdessen ein Stück Wand verschwindet (und zwar das, das im Vector an letzter Stelle stand). Wenn ich schon mehrere Player geaddet habe, verschwinden auch gerne mal die statt der Wand.

Nochmal zu Swing - kann es vielleicht echt sein, dass das keyTyped Event nicht sauber mit Swing zusammenarbeitet? Ich begrenze die FPS nicht, das Programm ist ständig am Arbeiten, wenn keyTyped in einem eigenen Thread arbeitet oder so kanns da bestimmt leicht zu interferenzen kommen oder?
 
S

SlaterB

Gast
Interferenzen kann es geben, ja, wenn auch andere deine Threads gleichzeitig einfügen und entfernen,
aber eher gibts bei sowas Exceptions als verlorene Elemente..,
entfernt irgendeine Programmstelle aktiv? ist die hier wirklich nicht verdächtig?

wenn schon size()-Probleme macht, dann kannst du ja direkt in der keyPressed vor und nach dem Einfügen die size loggen,
ebenso zu Beginn und Ende von paint, außerdem vielleicht noch in einer vorhandenen Spielschleife eines Threads usw.,

du könntest auch eine eigene Klasse statt des Vectors verwenden, kann intern ja einen Vector haben,
nach außen nur add/remove anbieten + size + get, kein direktes iterieren über die Elemente, sonder for-i-Schleifen,
dann logge alle Methodenaufrufe, zumindest erstmal alle add+remove mit jeweils size davor/danach, ein so kontrolliertes Objekt kann nicht heimlich verändert werden,
um zu erkennen woher die Aufrufe kommen kannst du einen String als zweiten Parameter verwenden oder komplizierter mit dem StackTrace des Threads arbeiten,

das add() sollte weiterhin keine Auswirkungen haben,
bei manchen Collections oder auch Listen-Methoden wie contains(), Sortieren könnte man noch an kaputte equals- + hashCode-Methoden denken,
aber add() macht nun wirklich nicht viel
 

Memorius

Mitglied
Hi, ich habe jetzt an ein paar Stellen geloggt und mein Verdacht hat sich bestätigt.

Ich sortiere den Vector in jedem Frame, um die Figuren in der richtigen Reihenfolge rendern zu können. KeyPressed() pfuscht nun, wenn es dumm läuft, direkt in diesen Vorgan rein - dadurch geht ein Element verloren.

Okay, Problem erkannt - aber wie lösen? Soll ich das Element, das ich hinzufügen will vielleicht in einer Separaten Variablen erst ablegen, und das Programm dann in jedem Frame prüfen lassen ob in dieser Variablen was zum adden liegt? Oder soll ich das ganze irgendwie synchronisieren, das Ganze scheint ja ein Thread Problem zu sein. Wär toll, wenn mir erfahrene Leute da nen kleinen Tipp geben könnten :)

Vielen Dank für die klasse Hilfe hier!
 
S

SlaterB

Gast
Sortieren nebenbei.., das gibts ja auch noch, stimmt

die Standardlösung sieht für separate Threads
SwingUtilities.invokeLater(Runnable)
vor, in den Runnable-Objekt die Änderungen an GUI-relevanten Daten, aber nur die Änderungen, nicht die sekundenlangen Berechnungen/ Spiel-Schleifen

vielleicht etwas veraltet und SwingWorker moderner, zu solchen Themen sicherlich lieber erstmal groß suchen und lesen,
sollte ich irgendwann auch mal machen..

Lesson: Concurrency in Swing (The Java™ Tutorials > Creating a GUI With JFC/Swing)
 

Memorius

Mitglied
Hi,

ich habe es jetzt einfach so geregelt:

Der KeyListener darf nur in Variablen schreiben, ob ein Key gerade gedrückt wird. Das Spiel liest dann in jedem Tick diese Variablen. Dadurch kann der KeyListener nicht mehr auf z.B. den Vector zu ungünstigen Zeitpunkten zugreifen.

Vielen Dank euch allen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
P Objekte in Vector werden überschrieben Java Basics - Anfänger-Themen 4
P Array in Vector speichern Java Basics - Anfänger-Themen 2
E Methoden new Vector().add(x).add(x); ? Java Basics - Anfänger-Themen 5
F Vector istGeordnet Java Basics - Anfänger-Themen 15
R Vector-Filterfunktion Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
J Vector Manipulieren.. Wie? Java Basics - Anfänger-Themen 16
M Vector eines Vectors einzeln ausgeben Java Basics - Anfänger-Themen 9
K String kommt schon in Vector vor? Java Basics - Anfänger-Themen 36
J Erzeugung eines Vector-Objekts - Frage zum Typ Java Basics - Anfänger-Themen 3
H Zugriff auf Vector Element Java Basics - Anfänger-Themen 2
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
A Author in Vector Java Basics - Anfänger-Themen 22
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
K Collections Vector zu String casten Java Basics - Anfänger-Themen 4
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20
B Globale vector? Java Basics - Anfänger-Themen 7
E 2 Dimensionaler Vector Java Basics - Anfänger-Themen 5
T Map<String, Vector>? Java Basics - Anfänger-Themen 11
P Collections Vector füllen in for-Schleife Java Basics - Anfänger-Themen 3
J Vector Addition Java Basics - Anfänger-Themen 5
M 2D Vector Java Basics - Anfänger-Themen 2
N IndexOutOfBoundsException: Source does not fit in dest beim Kopieren von ArrayList in Vector Java Basics - Anfänger-Themen 4
M Umwandlung von Array in Vector und umgekehrt Java Basics - Anfänger-Themen 6
E Datentypen Klasse Vector aus der Standard-API anwenden Java Basics - Anfänger-Themen 7
D Klasse Vector entwerfen Java Basics - Anfänger-Themen 7
A Arrays vs Liste vs Vector Java Basics - Anfänger-Themen 30
H in for Schleife über Vector iterieren Java Basics - Anfänger-Themen 2
S Datentypen Vector auslesen Java Basics - Anfänger-Themen 12
yampi Objektsammlung - Hashtable, Vector, Arrays Java Basics - Anfänger-Themen 8
T Vector-Positin anzeigen Java Basics - Anfänger-Themen 3
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
C Datentypen Probleme mit Vector.contains() Java Basics - Anfänger-Themen 10
M Datentypen function(Vector<SuperClass>), Vector<Subclass> Java Basics - Anfänger-Themen 6
L Vector Sortieren Java Basics - Anfänger-Themen 8
B Vector in Table ersetzen Java Basics - Anfänger-Themen 4
B Werte einer Spalte aus DB in einen Vector schreiben Java Basics - Anfänger-Themen 15
kitz Telefonbuch (Vector) Java Basics - Anfänger-Themen 17
E Arraylist mit Daten aus Vector füllen Java Basics - Anfänger-Themen 7
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
F Vector wird überschrieben Java Basics - Anfänger-Themen 8
T Vector sortiern Java Basics - Anfänger-Themen 7
C Frage zu Vector und muliplizieren des Inhaltes Java Basics - Anfänger-Themen 2
S Vector von eigenen Klassen Java Basics - Anfänger-Themen 2
J Collection Vector Java Basics - Anfänger-Themen 8
Streeber ArrayList/Vector, mehrdimensional Java Basics - Anfänger-Themen 11
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
babel Einen Vector/Liste mit Daten prüfen Java Basics - Anfänger-Themen 31
B Hilfe zum einem Problem mit Vector Java Basics - Anfänger-Themen 8
H Vector - Fehler? Java Basics - Anfänger-Themen 2
babel einen Vector nach Datum sortieren Java Basics - Anfänger-Themen 21
T Array-Vector Problem Java Basics - Anfänger-Themen 18
P Vector und Exception Java Basics - Anfänger-Themen 7
K Vector Java Basics - Anfänger-Themen 3
K Vector Java Basics - Anfänger-Themen 10
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
T Object aus Vector übergeben Java Basics - Anfänger-Themen 2
B Vector<Point> als Rückgabewert Java Basics - Anfänger-Themen 23
L Vector einem Array hinzufügen Java Basics - Anfänger-Themen 14
P Vector mit double Java Basics - Anfänger-Themen 3
P Vector Elemente auslesen Java Basics - Anfänger-Themen 9
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
W Vector mit String[] auslesen Java Basics - Anfänger-Themen 4
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
B Dopplete aus Vector entfernen Java Basics - Anfänger-Themen 8
E Vector Fehler bei allen Methoden von Vector Java Basics - Anfänger-Themen 2
K Vector zu Array machen Java Basics - Anfänger-Themen 10
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
L Multidimensional Vector - Recordset Java Basics - Anfänger-Themen 5
K Objektklasse mit leerem Vector füllen Java Basics - Anfänger-Themen 6
K Vector wird überschrieben Java Basics - Anfänger-Themen 7
G Vector Strijng parsen Java Basics - Anfänger-Themen 6
K vector cannot be resolved Java Basics - Anfänger-Themen 3
G Zeichenkette suchen in Vector-Klasse Java Basics - Anfänger-Themen 11
R fehler beim incrementellen schreiben in einen vector Java Basics - Anfänger-Themen 11
M ObjectInputStream, Object und Vector<Object> Java Basics - Anfänger-Themen 4
G Vector, equal & Casts Java Basics - Anfänger-Themen 5
N Objekte in einen Vector packen oder nicht? Java Basics - Anfänger-Themen 3
D Frage zu Vector Java Basics - Anfänger-Themen 7
S Problem mit Vector Java Basics - Anfänger-Themen 2
G Object[] [] nach vector casten. Java Basics - Anfänger-Themen 3
G 2D vector zugriff auf elementinterne elemente wie Java Basics - Anfänger-Themen 3
G vector in neuem vector sortieren Java Basics - Anfänger-Themen 3
G jede 2te zeile in vector leer einfügen, wie? Java Basics - Anfänger-Themen 4
G vector füllt sich immer weiter. wo muss ich ihn leeren? Java Basics - Anfänger-Themen 3
V Vector/Arraylist hat nur gleiche Einträge Java Basics - Anfänger-Themen 3
G Vector eigenen Typs mit Daten füllen Java Basics - Anfänger-Themen 20
H Vector und Dateien Java Basics - Anfänger-Themen 27

Ähnliche Java Themen

Neue Themen


Oben