öffentliche nicht-statische Funktion fremder Klasse ausführn

Status
Nicht offen für weitere Antworten.

matzze2000

Aktives Mitglied
Habe jetzt mal den Threadtitel ein bissel passender gestaltet, siehe letzter Post...
--------------------------------------------------------------------------------------------

Hallo, ich habe mal eine grundlegende (anfänger) Frage:

Ich habe in einer Klasse GUI ein Objekt so implementiert:
Code:
public JLabel gesamtKunde = new JLabel("Endkundenpreis: 0€");

Wenn ich jetzt aus einer anderen Klasse auf dieses Objekt zugreifen will bekomme ich den Fehler:
cannot make a static reference to the non-static field GUI.gesamtKunde

Eine Möglichkeit diesen Fehler zu beheben wäre ja das Objekt einfach "static" zu machen. Das will ich aber nicht, gibt es nicht noch irgend eine andere Möglichkeit?
 

PaiMei

Mitglied
Du kannst aus einer static Methode heraus nicht auf eine Objektreferenz zugreifen.

Umgekehrt kann aber z.B. eine Objektreferenz auf eine static Variable zugreifen
 

Niki

Top Contributor
du brauchst eine Instanz der Klasse um auf das Objekt zugreifen zu können:

Code:
  GUI gui = new GUI();
  gui.gesamtKunde.setText("test");
 

matzze2000

Aktives Mitglied
Niki hat gesagt.:
du brauchst eine Instanz der Klasse um auf das Objekt zugreifen zu können:

Code:
  GUI gui = new GUI();
  gui.gesamtKunde.setText("test");

Wenn ich es so mache kann aber aus der anderen Klasse nicht auf "gui" zugegriffen werden: "gui cannot be resolved". Aber irgendwie muss das doch gehen, zur Not mit nem kleinen Trick oder so.
 

matzze2000

Aktives Mitglied
Mhh, habe jetzt mal geguckt wie genau das eigentlich war... Das eigentlich Problem ist folgendes:

Ich will aus der Klasse "GUI" auf die öffentliche, nicht statische Member-Funktion einer anderen Klasse zugreifen. Dabei bekomme ich den Fehler dass ich keine statische Referenz auf die nicht statische Funktion erstellen kann. Ich kann die Funktion aber auch nicht static machen weil diese wiederum auf Klassenfremde Variablen zugreift die dann auch statisch werden müssen und irgendwann gibt es dann ne Funktion die dann auch wieder statisch werden müsste, es aber nicht werden darf.

Kann ich nicht irgendwie diese Funktion aufrufen? Sie erhält weder Variablen und ihr Rückgabetyp ist void, deswegen versteh ich auch nicht so recht, warum die Funktion unbedingt static sein muß um sie einmalig aufzurufen :shock:
 

Niki

Top Contributor
Du solltest dir mal den unterschied von statisch und nicht statisch anschaun. Das ist Java-Grundwissen. Wenn dir der Unterschied nicht klar ist wirst du auch in Zukunft Verständnisprobleme haben.
Nur mal schnell erklärt:
statische Methoden/Attribute haben keinen Bezug zu Objekten (Instanzen -> GUI gui = new GUI(), gui ist eine Instanz). Sie gehören zu einer Klasse und sind daher auch über diese ansprechbar: GUI.tuEtwas();

nicht statische Methoden benötigen IMMER einen Objekt-Bezug. GUI gui = new GUI(); gui.tuEtwas(); -> für das Objekt gui wird die Methode tuEtwas durchgeführt.

Wenn du zum Beispiel eine statische Variable hast, ist der Wert oder die Referenz der Variable in der ganzen VM ansprechbar und hat für alle den selben Wert!

Vielleicht hilft dir das dein Problem in den Griff zu bekommen[/u]
 

matzze2000

Aktives Mitglied
Ok, danke erstmal für diese kurze Erklärung die mir so nicht ganz klar war.
Aber auch wenn ich es so mache wie in deinem Vorschlag und eine Instanz von GUI erstellt mittels
Code:
GUI gui = new GUI();

und dann eine öffentliche Variable aus GUI aufrufen will mittels

Code:
gui.aVariable.x
bekomme ich die Fehlermeldung "gui cannot be resolved" :?

Edit: kann es sein, dass es daran liegt, dass ich gui in der main Funktion von GUI initialisiere und die andere Klasse das ganze deshalb nicht sehen kann?
 

Niki

Top Contributor
Kommt drauf an wo du GUI gui = new GUI(); aufrufst. Wenn GUI in einem anderen package liegt musst du die Klasse importieren

Ich kann dir auch nicht sagen ob das die Lösung für dein Problem ist.
 

Leroy42

Top Contributor
matzze2000 hat gesagt.:
Edit: kann es sein, dass es daran liegt, dass ich gui in der main Funktion von GUI initialisiere und die andere Klasse das ganze deshalb nicht sehen kann?

Fast! Nicht weil du die Variable in der main-Klasse initialisierst,
sondern weil du sie dort deklarierst.

Dadurch ist sie ja auch nur in der Main-Methode bekannt.
 

lhein

Top Contributor
Ich glaube es wird Dir niemand helfen können, bevor Du den Code nicht mal online gestellt hast. Mit den paar Schnipseln kann niemand irgendwelche Zusammenhänge erkennen, geschweige denn Dir eine Lösung vorschlagen.

lr
 

matzze2000

Aktives Mitglied
Ok, hier is mal der Code... Habe ein bissel was raus gekürzt was hier sowieso nich wichtig is:

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;


public class GUI implements ActionListener{

	public static JLabel gesamtKunde = new JLabel("Endkundenpreis: 0€");
	public static JLabel gesamtHaendler = new JLabel("Händlerpreis: 0€");
	public static JLabel gesamtGewinn = new JLabel("Händlergewinn: 0€");
	public static double rabattProzent = 40;
	ButtonGroup g = new ButtonGroup();
	
	public static void main(String[] args) {
		GUI gui = new GUI();
	}
	
	public GUI(){
		JFrame window = new JFrame( "Sunsoft Preiskalkulator" );
	    window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	    window.setSize( 800, 600 );
	    
	    JPanel basicWindow = new JPanel();
	    JPanel gesamtPreisePanel = new JPanel();
	    
	    basicWindow.setLayout(new BorderLayout(5,5));
	    window.add(basicWindow);
	    JScrollPane tableScrollpane = new JScrollPane(drawTable());
	    
	    basicWindow.add(drawRadioButtons(), BorderLayout.NORTH);
	    basicWindow.add(tableScrollpane);
	    basicWindow.add(gesamtPreisePanel, BorderLayout.SOUTH);
	    
	    gesamtPreisePanel.add(gesamtKunde);
	    gesamtPreisePanel.add(gesamtHaendler);
	    gesamtPreisePanel.add(gesamtGewinn);
	    
	    window.setVisible( true );
	}
	
	private JPanel drawRadioButtons (){ 
	      //Funktion 
	   }
	
	public void actionPerformed(ActionEvent e) {
	      //funktion
	   }

	@SuppressWarnings("unchecked")
	private JTable drawTable() {
		 //erstellt die Tabelle
	}
}

class Produkttabelle implements TableModel, TableModelListener{
	private Vector articels = new Vector();
	private Vector<Integer> anzahlArtikel = new Vector<Integer>();
	private Vector listeners = new Vector();
	
	//diverse Funktionen für die Tabelle

//diese Funktion is eine der Sorgenkinder. Die kann ja nicht static sein und greift auf fremde Variablen zu:
	
	public Object getValueAt(int rowIndex, int columnIndex) {
		Artikel artikel = (Artikel)articels.get( rowIndex );
		int anzahl = anzahlArtikel.get(rowIndex);
	       
	      switch( columnIndex ){ 
	         case 0: return artikel.getName();
	         case 1: return new Double( artikel.getPreis() );
	         case 2: return anzahl;
	         case 3: return new Double ( anzahl * artikel.getPreis());
	         case 4: return new Double( artikel.getRabatt()* GUI.rabattProzent );
	         case 5: return new Double( anzahl * ( artikel.getPreis() - artikel.getPreis() * artikel.getRabatt() * (GUI.rabattProzent / 100) ) );
	         default: return null;
	      }
	}
	//und diese Funktion soll auch aus der Klasse GUI aufgerufen werden können
	public void gesamtBetraege(){
		//Erst den Kunden ausrechnen
		double betragKunde = 0, betragHaendler = 0;
		for(int i=0; i< articels.size(); i++){
			betragKunde += (Double)getValueAt(i, 3);
		}
		GUI.gesamtKunde.setText("Endkundenpreis: " + betragKunde + "€");
		//Jetzt den Händler
		for(int i=0; i< articels.size(); i++){
			betragHaendler += (Double)getValueAt(i, 5);
		}
		GUI.gesamtHaendler.setText("Händlerpreis: " + betragHaendler + "€");
		//Jetzt den Gewinn
		GUI.gesamtGewinn.setText("Händlergewinn: " + (betragKunde - betragHaendler) + "€");
	}
}
 

Leroy42

Top Contributor
Code:
class Produkttabelle implements TableModel, TableModelListener{
  GUI gui;
  ...
  Produkttabelle(GUI gui) {this.gui = gui;}
  ...
}

Und dort wo du eine Instanz der Klasse Produkttabelle erstellst,
übergibst du die Instanz der aktuellen gui; in der Art:

Code:
Produkttabelle tabelle = new Produkttabelle(this);
 

lhein

Top Contributor
und statt
Code:
GUI.gesamtHaendler.setText....

dann
Code:
this.gui
verwenden.

lr
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K OOP duplicate class, öffentliche Klasse in unterschiedlichen Java Dateien speichern? Java Basics - Anfänger-Themen 3
I Webservice funktioniert nicht Java Basics - Anfänger-Themen 5
C Abbruch einer Schleife mit break, meine Übung funktioniert nicht richtig Java Basics - Anfänger-Themen 4
SarahXyy Ergebnisse stimmen nicht überein? Java Basics - Anfänger-Themen 11
thomas55 Erste Schritte Modul läuft in IntelliJ, nicht in NetBeans Java Basics - Anfänger-Themen 11
richis-fragen Nicht ausführbares JAR, externe jars mit einbinden Java Basics - Anfänger-Themen 7
S Erstes Programm: Hallo Welt funktioniert nicht. Java Basics - Anfänger-Themen 3
O Obfuscateter Code lässt sich nicht ausführen? Java Basics - Anfänger-Themen 7
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
S Ist JDK jetzt free oder nicht? Java Basics - Anfänger-Themen 5
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben