Setter-Methode wird aufgerufen aber ändert nichts?

Status
Nicht offen für weitere Antworten.

manuche

Bekanntes Mitglied
Hallo,
ich programmiere grade ein Spiel. Im Hauptthread wird bei einem bestimmten "Event" in einer extra Methode eine Art Berechnung durchgeführt um ein aktuelles Objekt festzustellen... Über die Referenz und dessen setter-Methode möchte ich einfach nur einen boolischen Wert ändern... Nur leider funktioniert das nicht. Ich hab mal debuggt und obwohl die Methode ordnungsgemäß ausgeführt und macht in dem Objekt die Änderung die sie soll, soviel ist sicher.
Allerdings verfällt die Änderung direkt wenn ich aus der Methode herausspringe... Da Code den Rahmen sprengen würde poste ich's mal Schemenhaft:

Code:
public void run(){
  berrechnewas();
  ...
}

public void berrechnewas (){
  Referenz ref = null;
  if (object1 != null){
    ref = object1;
  }else if (object2 != null){
    ref = object2;
  }
  ref.setzeboolean (true) //wird ausgeführt und der boolean wird gestetz
  // sobald ich nun im watch unter ref gucke ist der boolean allerdings noch false
}

auch wenn ich direkt mit object1.setzteboolean (true) arbeite wird der wert nicht übernommen...
woran könnte das liegen? hat das unter umständen was mit dem thread zu tun???
 

Ariol

Top Contributor
Zeig doch mal, wo die Variable initialisiert wird und poste den Code von Referenz#setzeboolean(boolean)

Ach ja: in Java schreibt man CamelCase also setzeBoolean()
 
Z

Zetagi

Gast
Du erstellst eine lokale Variable Referenz ref innerhalb der Methode. Die Variable ist auch nur innerhalb der Methode sichtbar. Sobald du die Methode verlässt wird (wenn sie existiert) die übergeordnete Variable ref wieder verwendet/angezeigt.

Zusätzlich müssen bei der Verwendung von mehreren Threads Multithreading Probleme beachtet werden.

Dazu müssen CodePassagen/Variablen synchronisiert werden. Eine Variable kann z.B. auch als volatile bezeichnet werden, damit sie immer sauber gespeichert wird, bevor der nächste Thread darauf zu greifen kann.
 

manuche

Bekanntes Mitglied
jo ich weiss... war nur zu faul so auf die convention zu achten ^^

is noch nen bissl quick and dirty und sieht wohl für den ein oder anderen verwirrend aus xD
deswegen wollte ichs ja schematisch machen aber ihr habts nich anders gewollt...

Code:
	public int computeShoot (Point p){
		Rectangle2D r1 = s1copy.getBounds().getBounds2D();
		Rectangle2D r2 = s2copy.getBounds().getBounds2D();
		Rectangle2D r3 = s3copy.getBounds().getBounds2D();
		Rectangle2D r4 = s4copy.getBounds().getBounds2D();
		Rectangle2D r5 = s5copy.getBounds().getBounds2D();
		Rectangle2D[] rects = {r1, r2, r3, r4, r5};
		Rectangle2D hit = new Rectangle ((p.x * 30) + selfPanel.getX() + 15, (p.y * 30) + selfPanel.getY() + 30 + 15, 1, 1).getBounds2D();
		for (int x = 0; x < rects.length; x++){
			if (rects[x].intersects (hit)){
				Ship victim = null;
				switch (x){
				case 0: victim = s1copy; break;
				case 1: victim = s2copy; break;
				case 2: victim = s3copy; break;
				case 3: victim = s4copy; break;
				case 4: victim = s5copy; break;
				}
				int seg = computeSegment (rects[x], hit, victim);
				victim.setExplosion (true);           // hier
				victim.setDamagedAt (seg);
			    if (victim.isDestroyed()){
			    	if (!checkGame()){
			    		return 3;
			    	}
			    	return 2;
			    }
				return 1;
			}
		}
		return 0;
	}
 

Ariol

Top Contributor
Ich hab deinen Code mal etwas "vereinfacht" (ungetestet)

Code:
public int computeShoot (Point p){
      Ship[] ships = {s1copy,s2copy,s3copy,s4copy,s5copy};
      Rectangle2D hit = new Rectangle ((p.x * 30) + selfPanel.getX() + 15, (p.y * 30) + selfPanel.getY() + 30 + 15, 1, 1).getBounds2D();
      for (Ship victim : ships){
         Rectangle2D shipRect = ship.getBounds().getBounds2D();
         if (shipRect.intersects (hit)){
            int seg = computeSegment (shipRect, hit, victim);
            //drawExplosion = true;
            victim.setExplosion (true);           // hier
            victim.setDamagedAt (seg);
             if (victim.isDestroyed()){
                if (!checkGame()){
                   return 3;
                }
                return 2;
             }
            return 1;
         }
      }
      return 0;
   }

Versuch's mal so - woran's genau liegt weiß ich leider nicht.

Poste auch mal deine Ship-Klasse, oder zumindest die setExplosion-Methode.
 

manuche

Bekanntes Mitglied
genau da liegt das problem:
Code:
	public void setExplosion (boolean draw) {
		drawExplosion = draw;
	}
mehr ist es nicht... es wird einfach nur die Instanzvariable geändert... habs auch schon damit versucht, den boolean public zu deklarieren um direkt drauf zugreifen zu können! gleiches ergebnis... das komische ist, wenn ich debugge und er in die Instanz der Ship-Klasse springt wir der boolisch Ausdruck auch geändert, nur wenn ich wieder raussteppe wurde der wert nicht geändert!
 

outbreaker

Bekanntes Mitglied
manuche hat gesagt.:
genau da liegt das problem:
Code:
	public void setExplosion (boolean draw) {
		drawExplosion = draw;
	}
mehr ist es nicht... es wird einfach nur die Instanzvariable geändert... habs auch schon damit versucht, den boolean public zu deklarieren um direkt drauf zugreifen zu können! gleiches ergebnis... das komische ist, wenn ich debugge und er in die Instanz der Ship-Klasse springt wir der boolisch Ausdruck auch geändert, nur wenn ich wieder raussteppe wurde der wert nicht geändert!

Daran lässt sich nun wirklich kein Fehler erkennen.
Was ist mit dem Rest der Klasse?
wir dein Wert vielleicht an einer anderen Stelle wieder zurück gesetzt?
ist deine getMethode falsch?
...
 

manuche

Bekanntes Mitglied
Nein alles Korrekt... Es liegt vermutlich am Thread, da alles ziemlich verschachtelt ist und ich keine Synchronisation verwende.... Hatte nur noch keine Zeit es zu testen bzw umzuschreiben!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ISO 8601 -> getter / setter String Allgemeine Java-Themen 3
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
perlenfischer1984 Java Builder vs Setter Allgemeine Java-Themen 1
S Klassen Prüfungen im Setter Allgemeine Java-Themen 6
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Getter und Setter Verständnisfrage Allgemeine Java-Themen 10
L OOP Setter u. Getter (und weiteres) Allgemeine Java-Themen 7
M Einkapselung, Getter und Setter Allgemeine Java-Themen 6
D Design ohne Getter und Setter Allgemeine Java-Themen 8
G setter und getter: Parameter Überprüfung Allgemeine Java-Themen 6
J Setter mittels invoice aufrufen Allgemeine Java-Themen 4
wachtda Getter und Setter Allgemeine Java-Themen 1
V Setter zum Berechnen nutzen? Allgemeine Java-Themen 5
J getter und setter Allgemeine Java-Themen 29
C setter funktionieren nicht Allgemeine Java-Themen 10
K java.lang.reflect - Getter und Setter ermitteln Allgemeine Java-Themen 8
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
snipesss Methode greift nicht auf JTextPanel zu Allgemeine Java-Themen 3
R Methode in Methode voraussetzen Allgemeine Java-Themen 8
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben