Klassenvariable wird nicht überschrieben.

Moch

Bekanntes Mitglied
Hallo,
Im Zuge unserer Gruppenprojekts haben wir ein Problem mit einer Variable, die nicht, wie gewünscht überschrieben wird.
Genutzt wird (falls es jemand kennt), das Framework SalesPoint
Da die Klassen untereinander große Abhängigkeiten besitzen und wir die Klassen des Framesworks selbst nicht einsehen können, poste ich hier nur ein vereinfachtes Beispiel.

Java:
public class ContentCreatorPersonenAnzeigen {

//Ist die Variable, die geändert werden soll;
int changeVal;

JTable person;

   @override
   protected void createFormSheetContent(Formsheet fs){

		person.setSelectionMode(ListSelectionModel.SINGLE_SELECTION );	
		person.addMouseListener(new MouseListener(){

			@Override
			public void mouseClicked(MouseEvent e) {
				changeVal = person.getSelectedRow();
                                System.out.println(changeVal); // Der Wert ist immer korrekt;
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
		});


   }

}

Ich hoffe, dass das Beispiel halbwegs das Problem zeigt:

Folgende Fakten dazu:
- der JTable funktioniert einwandfrei und wird korrekt ausgegeben;
- die variable changeVar wird in der Konsole als korrekt ausgegeben (über System.out.println(changeVal)...egal an welcher Stelle.
- wir können keinen Konstruktor schreiben (Framework)
- an den offenbar irgendwo vorhandenen Konstruktor kommen wir nicht rein(Framework)

Fehler der Auftritt:
- changeVar behällt den anfangs deklarierten wert. Im hier genannten Beispiel wäre changeVar = 0;
Initialisieren wir es als irgendetwas anderes, so behällt changeVar leider seinen vorgegebenen Wert und wird nicht korrekt überschrieben.

Das führt dazu, dass immer die selbe Person in einer Liste ausgewählt wird (nämlich deren Index vorher initialisert wurde). Die Auswahl der Person selbst und die nächste GUI, die wir im Zuge dessen nutzen, ist Framework-intern, funktioniert aber, für den Index (der leider nicht überschrieben wird)

Unsere Ideen, woran es liegen könnte
- Überschreiben der Klassenvariablen funktioniert in dieser internen Methode nicht (haben es mit einem Setter versucht, aber es hat nichts an der Var geändert... Werte im Setter waren korrekt)
Setter war von der Form
Java:
public void setChangeVar(int changeVar){
this.changeVar = changeVar;
}

- irgendwo wird eine neue Instanz von ContentCreatorPersonAnzeigen erzeugt ... dies geschieht aber nicht in den von uns geschriebenen Klassen und wir wissen auch nicht, wie wir das nachprüfen oder umgehen könnten;


Wir bitte Euch da um Hilfe. Wäre echt klasse, wenn wir da einen entscheidenden Gedankenanstoß bekommen.

LG
Moch
 

jgh

Top Contributor
Imho liegt das Problem nicht in eurer Klasse
Code:
ContentCreatorPersonenAnzeigen
, sondern im Framework selbst. Wenn die Variable
Code:
changeVal
den korrekten Wert per
Code:
System.out.println()
liefert, dann sollte es richtig sein.

Eine Möglichkeit wäre, dass bei einer Änderung der GUI sich das Framework eine neue Instanz von
Code:
ContentCreatorPersonenAnzeigen
holt. Das würde erklären, warum immer der Defaultwert angezeigt wird. Aber das ist Kaffeesatzleserei.

EDIT:
Habe erst jetzt die Überschrift beachtet. Deine Variable
Code:
changeVal
ist natürlich keine Klassenvariable, sondern eine Instanzvariable. Von Klassenvariablen spricht man dann, wenn die Variable an die Klasse gebunden ist und somit für alle Instanzen der Klasse den gleichen Wert besitzt. Dieses wird in Java durch das Wort [c]static[/c] erreicht.
 
Zuletzt bearbeitet:

Moch

Bekanntes Mitglied
Ah, vielen Dank für die Informationen. Das mit dem Static wusste ich bisher nicht =)

Wir habe das Problem mittlerweile teilweise umgangen, indem wir eine eigene Klasse erstellt haben, die nur diesen einen Integer enthällt. Das funktioniert auch, aber nur bedingt:

Wenn wir jetzt eine Liste von Personen haben

- Person A
- Person B
- Person C

Wählt man Person A, so wird diese korrekt angezeigt; Wählt man danach Person B/C, dann wird wieder A angezeigt, es sei denn, man klickt zwei Mal auf Person B/C.
Die Variable der anderen Klasse sollte aber JEDES Mal geändert werden, da die entsprechende Methode auch jedes Mal aufgerufen wird und die richtigen Werte auch in der Konsole ausgegeben werden.
Ich frage mich, ob das nicht ein Problem von JTable ist?

Grüße und Danke

PS: neuer Quellcode-Ausschnitt folgt gleich in Edit:

Java:
            @Override
            public void mouseClicked(MouseEvent e) {
                changeVal = person.getSelectedRow();
                System.out.println(changeVal); // Der Wert ist immer korrekt;
                AndereKlasse.var = changeVal; //zum Testen war hier alles public. Passiert aber nur jedes 2. Mal
            }
 

Madlip

Bekanntes Mitglied
das kommt mir echt alles spanisch vor.

Versuch mal in der anderen Klasse deine changeVar in eine static Variable mehr zu machen.

Da die sich ja immer mit ändern soll, passt das.

Damit umgehst du auch das "eventuelle" Problem das von der Var irgendwie eine Kopie erstellt werden könnte.

Gruß
 

GUI-Programmer

Top Contributor
Ich glaube schon in Zeile 4
Code:
int changeVal;
liegt der Fehler. Denn wenn deine Klasse von einer anderen erbt (auch wenn bei dir kein extends steht), überschreibt man die Variablen nicht, indem man sie neu erstellt, sondern einfach einen anderen Wert zuweist. D.h. kommentier doch einfach mal Zeile 4 aus.

Beispiel:
Java:
import java.awt.Point;

public class Test4 extends Point {
	public void doIt() {
		System.out.println("X: "+x+"  Y: "+y);
	}
	
	public void change() {
		x = 50;
		y = 80;
	}
	
	public static void main(String[] args) {
		Test4 test = new Test4();
		test.x = 1;
		test.y = 2;
		System.out.println(test.getLocation());
		test.doIt();
		test.change();
		System.out.println(test.getLocation());
		test.doIt();
	}
}
 
Zuletzt bearbeitet:

Moch

Bekanntes Mitglied
Danke für eure Antworten;
Nee, die Variable wird in dieser Klasse erstmals eingeführt und gilt auch nur dort. Kommentieren wir es aus, dann wird die Variable unten nicht mehr anerkannt.

Das Problem wurde aber von einem anderen Teil der Projektgruppe beseitigt. Was genau die Lösung jetzt war, weiß ich nicht und mir verständlich erklären, wollte das auch keiner. Leider verfüge ich derzeit auch nicht über den gültigen, aktuellen Quelltext;

Trotzdem vielen Dank für eure Hilfe.
:)
Bye
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
kodela Klassen Klassenvariable wird nicht gesetzt Allgemeine Java-Themen 23
J Variablen Scanner als Klassenvariable Allgemeine Java-Themen 5
D String und Klassenvariable Allgemeine Java-Themen 6
P static Klassenvariable Allgemeine Java-Themen 15
J Lebensdauer einer Klassenvariable Allgemeine Java-Themen 3
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Y MVVM wie wird Eventhandler tausch geregelt Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
hello_autumn Java_Home geändert auf Java 13, trotzdem wird Java Version 8 angezeigt. Allgemeine Java-Themen 2
Thallius Char +1 wird int? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
F Scrollbar wird nicht angezeigt Allgemeine Java-Themen 0
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
N Datentypen If-Statement wird "übersprungen" Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Java wird nicht gefunden Allgemeine Java-Themen 32
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
Z Exception wird nicht ausgelöst Allgemeine Java-Themen 2
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
O Programm wird einfach "gekillt" Allgemeine Java-Themen 3
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
B Abfragenteil wird nicht aufgerufen Allgemeine Java-Themen 2
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
T Sicherheitshinweis - Zertifikat wird angefordert Allgemeine Java-Themen 5
L SetBounds wird vor dem Konstruktorcode aufgerufen - Wenn Startleiste links Allgemeine Java-Themen 1
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
I CountDown wird durch JOptionPane unterbrochen Allgemeine Java-Themen 11
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
G Tabelle wird nicht richtig dargestellt Allgemeine Java-Themen 9
HarleyDavidson Threads ProgressMonitor wird nicht angezeigt! Allgemeine Java-Themen 6
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
A Long variable wird negativ??? Allgemeine Java-Themen 1
J CSV Datei wird ungewollt umformatiert Allgemeine Java-Themen 5
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
gamebreiti Swing JLabel wird nicht angezeigt Allgemeine Java-Themen 4
I Java Applet wird immer blockiert Allgemeine Java-Themen 3
E Java Editor Klasse wird nicht weiter ausgeführt Allgemeine Java-Themen 4
S Java Applet wird dauerhaft blockiert Allgemeine Java-Themen 1
I Datei wird nicht richtig gelöscht Allgemeine Java-Themen 7
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
F Nach Export wird PDF Datei nicht mehr gefunden Allgemeine Java-Themen 0
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
D ActionListener wird mit jedem Mal öfter aufgerufen Allgemeine Java-Themen 2
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
I Projekt wird nicht erstellt Allgemeine Java-Themen 2
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
A Threads Log4J Logger wird "überschrieben" Allgemeine Java-Themen 3
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
J batch datei wird nicht aufgerufen Allgemeine Java-Themen 11
M Datei wird nicht vollständig geschrieben (FileOutputStream, OutputStreamWriter, Encoding) Allgemeine Java-Themen 6
P OSGi - Bundle-Methode wird nicht aufgerufen Allgemeine Java-Themen 3
S Antlr Grammatik übersetzt ohne Fehler, dennoch wird Zahl nicht als Eingabe erkannt Allgemeine Java-Themen 4
T Variablen Variable wird als nicht genutzt angezeigt Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben