Müssen globale Funktionen immer "static" sein?

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo!
Ich brauche in einer Klasse den erzeugten Frame von einer anderen Klasse. Also habe ich in meiner Frame-Klasse folgenden Code:
Code:
public JFrame getFrame() {
    return this;
}

In der Klasse, in der ich den Frame haben möchte, rufe ich die Funktion getFrame() auf und will den return-Wert in einer Variablen abspeichern:
Code:
private JFrame frame = blub.getFrame();
Und jetzt die Fehler-Meldung:
blub.java:9:30: non-static method getFrame() cannot be referenced from a static context
Ich habe zwar nirgendwo einen "static context" aber was solls. Zumindest weiß ich jetzt nicht, wie ich den Frame in die andere Klasse bekommen kann. Wenn ich die Methode getFrame() statisch mache, dann kommt die Fehlermeldung, dass "this" nicht statisch ist, und wenn ich die Variable "frame" statisch mache, kommt die gleiche Fehlermeldung wie oben. Was kann ich tun?
 
S

SlaterB

Gast
> Was kann ich tun?
mehr Code posten und/ oder genauer den Fehler erkären,
ich kann mir tatsächlich gar nicht vorstellen, wie die diesen Fehler bekommst,

denn
> private JFrame frame = blub.getFrame();
klinkt ja wirklich nicht nach static ;)

was ist eigentlich das ominöse blub?

---------

bei mir gibts jedenfalls keine Fehler

Code:
public class TestGUI
    extends JFrame
{
    public TestGUI()
        throws Exception
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 400);
        setVisible(true);
    }

    public JFrame getFrame()
    {
        return this;
    }

    public static void main(String[] args)
        throws Exception
    {
        TestGUI blub = new TestGUI();
        JFrame frame = blub.getFrame(); // klappt
    }
}


class A
{
    private TestGUI blub = null;
    private JFrame frame = blub.getFrame(); // klappt (aber besser nicht laufen lassen ;) )

}
 
G

Gast

Gast
Hier mal mehr Code:

Code:
public class blub {
  private int ID;
  private static Button ersterButton;
  private static Button zweiterButton;
  private static int anzahlUmgedreht;
  private JFrame frame = TestGUI.getFrame()
}
Code:
public class TestGUI extends JFrame {
  // Anfang Variablen

  // Ende Variablen

  public TestGUI(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 600;
    int frameHeight = 610;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten   
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public Memory getFrame() {          //Hier ist die Methode getFrame(). Der restliche Teil ist eine Vorlage.
    return this;
  }


  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new TestGUI("TestGUI");
  }
}
 
S

SlaterB

Gast
so machst schon mehr Sinn, da hatte ich die Fehlermeldung falsch verstanden,
sie besagt, dass du eine nichtstatische Operation nicht direkt an der Klasse aufrufen kannst,
sondern nur an Objekten (siebe mein Testprogramm mit den Objekten blub)

ist doch klar, was soll als this zurückgegeben werden wenn du das an einer Klasse aufrufst?
du sagst es ja selber..
 
G

Gast

Gast
Aber ich kann doch in der Klasse "blub" nicht folgenden Code ausführen lassen:
Code:
TestGUI testgui = new TestGUI("TestGUI");
private TestGUI frame = testgui.getFrame();
Ich brauche den Frame nämlich in einem Button, um den Hintergrund zu ändern. Und dann hätte jeder Button sein eigenes JFrame.
 
S

SlaterB

Gast
ich erklärte dir nur die Fehlermeldung,
was dein Programm so machen sollte weiß ich spontan nicht..

da musst du schon weiter ausholen
 
G

Gast

Gast
Dann hier mal die komplette Klasse:
Code:
public class Karte extends JToggleButton {
  private int ID;
  private static Karte ersteKarte;
  private static Karte zweiteKarte;
  private static int anzahlUmgedreht;
  TestGUI testgui = new TestGUI("TestGUI");                      //wäre unsinnig
  private TestGUI frame = testgui.getFrame();

  public Karte(int ID, int xcor, int ycor, int breite, int hoehe) {
    setBounds(xcor, ycor, breite, hoehe);
    this.ID = ID;
    addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        aufdecken();
      }
    });    
  }

  public void aufdecken() {
    Icon icon = new ImageIcon(getClass().getResource("img/1.jpg"));
    if(anzahlUmgedreht == 0) {
      ersteKarte = this;
      setIcon(icon);
      anzahlUmgedreht++;
    } else {
      setIcon(icon);
      frame.update(frame.getGraphics());                        //hier wird der Frame benutzt
      zweiteKarte = this;
      if(ersteKarte.getID() == zweiteKarte.getID()) {
        deaktivieren();
      } else {
        zudecken();
      }
    }
  }
 
S

SlaterB

Gast
frame.update(frame.getGraphics());
ist ja ein grausiger Befehl, reicht nicht
frame.repaint()?

auf jeden Fall muss das ja eine bestimmte einzelne GUI sein,
die irgendwo im Programm schon existiert,
diese muss dem neuen Button als Parameter über geben werden

z.B.
Code:
private JFrame frame;

public Karte(JFrame frame, int ID, ...) {
  this.frame = frame;
}
also: nicht durch irgendwelche obskuren Operationen eigenständig das JFrame holen (woher auch?)
sondern schlicht als Parameter übergeben,

dann hat natürlich der Aufrufer das Problem, aber der ist hoffentlich das JFrame oder kennt zumindest das JFrame?
denn irgendwie muss ja der fertige Button auch in das JFrame eingefügt werden..
 

*Hendrik

Bekanntes Mitglied
Wenn Du eine Referenz auf Deinen JFrame haben willst mache es doch so:

Definiere in Deiner Klasse TestGUI ein Feld:

Code:
private static TestGUI testGUI;

im Konstruktor von TestGUI:

Code:
testGUI = this;

und dann:

Code:
public static TestGUI getFrame() {         
    return testGUI; 
  }


Dann brauchst Du nur noch:

Code:
TestGUI.getFrame();

und Du hast eine Referenz auf Deinen JFrame
 

mikachu

Top Contributor
wobei mir das ganze nicht nach dem klassischen schema eines singletons aussieht...

was passiert, wenn der Konstruktor noch nie aufgerufen wurde, und aber doch die getFrame()-methode ?!?
 
G

Guest

Gast
Meiner Meinung nach ist deine ganze Logik falsch. Warum hast du in der Klasse Karte bei Variablen für Karte?

Ich würde mal schätzen, wenn ich mir deine Klasse so ansehen, dass du ne Art Memory-Spiel willst. Dazu wäre es sinnvoll einen Frame anzulegen und auf diesem die Objekte zu plazieren und nicht die Elemente irgendwie untereinandern zu verknüpfen, sondern das ganze von einer Hauptklasse steuern zu lassen.
 
S

SlaterB

Gast
static ist eine Eigenschaft einer Variablen oder einer Operation,
sie sind dann einer Klasse und keinem Objekt dieser Klasse zugeordnet,

siehe Lehrbuch
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
mervanpolat Methoden Warum müssen wir "int ans = -1;" hinzufügen? Java Basics - Anfänger-Themen 2
O Was tut diese Methode? und wie müssen die assertions aussehen? Java Basics - Anfänger-Themen 21
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
P Kapselung Variable innerhalb einer inneren Klasse ansprechen ohne ein Objekt erzeugen zu müssen? Java Basics - Anfänger-Themen 6
B Unterklassen von Exeptions müssen importiert werden ? Java Basics - Anfänger-Themen 3
S Doppelpunkte müssen untereinander stehen... Java Basics - Anfänger-Themen 4
G Interfaces - Müssen wirklich alle Methoden implement. werden Java Basics - Anfänger-Themen 8
G Müssen ActionListener + sein Button in einer Klasse liegen? Java Basics - Anfänger-Themen 11
E In welches Verzeichnis müssen selbsterstellte Klassen ? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
T Globale Variable mehrmals verwenden Java Basics - Anfänger-Themen 7
Traxter Globale Variable ? Java Basics - Anfänger-Themen 11
Jackii Globale Variable aus anderer Klasse ändern... Java Basics - Anfänger-Themen 4
S Vererbung/Globale Variablen Java Basics - Anfänger-Themen 8
M Variablen Globale Variable? Java Basics - Anfänger-Themen 4
Luk10 Globale (semi-finale) Varibalen Java Basics - Anfänger-Themen 9
U Globale Proxy Einstellungen ändern Java Basics - Anfänger-Themen 3
B Globale vector? Java Basics - Anfänger-Themen 7
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
B Methoden Globale Methoden "Toolbox" Java Basics - Anfänger-Themen 3
D globale Variablen zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
S globale Variable deklarieren Java Basics - Anfänger-Themen 10
E Globale int Variable? Java Basics - Anfänger-Themen 6
K Datentypen Globale Variable direkt initialisieren oder im Konstruktor? Java Basics - Anfänger-Themen 13
G Globale Variablen Java Basics - Anfänger-Themen 9
T Globale Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
G Globale Variablen Java Basics - Anfänger-Themen 3
T Globale Variable (Font) Java Basics - Anfänger-Themen 21
O globale variablen Java Basics - Anfänger-Themen 21
M Globale Variablen werden durch KeyListener nicht aktualisier Java Basics - Anfänger-Themen 10
A Globale Variable änderbar Java Basics - Anfänger-Themen 3
A Globale Methode ohne imports und übergeben? Java Basics - Anfänger-Themen 2
P textfarbe,textgröße, textart als globale einstellung Java Basics - Anfänger-Themen 7
F Globale Variablen wie in C++? Java Basics - Anfänger-Themen 5
J "Globale Variablen" Java Basics - Anfänger-Themen 26
S globale Variablen Java Basics - Anfänger-Themen 9
D Globale Klassenvariablen. Java Basics - Anfänger-Themen 12
P Globale und ständige Überwachung eines Textfeldes auf text? Java Basics - Anfänger-Themen 40
M Superglobale globale Variable? Java Basics - Anfänger-Themen 10
P Globale Variable Java Basics - Anfänger-Themen 3
J Globale Variablen Java Basics - Anfänger-Themen 3
D Globale Variablen Java Basics - Anfänger-Themen 31
C Globale Variablen und Array mit verschiedenen Typen Java Basics - Anfänger-Themen 3
S globale Variablen Java Basics - Anfänger-Themen 7
J "globale" variable definieren? Java Basics - Anfänger-Themen 7
S Globale Variable / Methode Java Basics - Anfänger-Themen 5
B Erste Schritte Bisektion mit zwei Funktionen? Java Basics - Anfänger-Themen 1
J Verständnisfrage zu throws neben Funktionen Java Basics - Anfänger-Themen 2
A Variablen Definitionen zu Codes und Funktionen. Java Basics - Anfänger-Themen 3
Z If Funktionen, GUI, Fachklasse Java Basics - Anfänger-Themen 25
H Frage zu Methoden/Funktionen Java Basics - Anfänger-Themen 3
M Vererbung Funktionen in Basisklasse deklarieren Java Basics - Anfänger-Themen 4
J Funktionen auf der Rückgabe eines Stacks (pop) Java Basics - Anfänger-Themen 6
J Funktionen Java Basics - Anfänger-Themen 9
S Klassen Class mit Funktionen importieren Java Basics - Anfänger-Themen 1
B Funktionen von außen aufrufen Java Basics - Anfänger-Themen 1
M Klassen Funktionen aus anderen Klassen benutzen Java Basics - Anfänger-Themen 3
G funktionen der super-klasse von der super-klasse Java Basics - Anfänger-Themen 6
R Funktionen Synchron laufen lassen Java Basics - Anfänger-Themen 10
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
A ganzrationale funktionen auswerten. Java Basics - Anfänger-Themen 1
S Funktionen/Atrribute nur innerhalb einer package Zugänglich machen Java Basics - Anfänger-Themen 8
Z Differenz zwischen 2 Daten berechnen, ohne importiere Funktionen! Java Basics - Anfänger-Themen 10
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
K Methoden Funktionen und Prozeduren Java Basics - Anfänger-Themen 11
R Rekursionen und Funktionen ... Java Basics - Anfänger-Themen 8
J Funktionen automatisiert aufrufen Java Basics - Anfänger-Themen 5
B Funktionen programmieren, die im Hintergrund aktiv sind Java Basics - Anfänger-Themen 2
O Funktionen dateiübergreifend mit Packages Java Basics - Anfänger-Themen 6
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
M Methoden Funktionen Java Basics - Anfänger-Themen 6
M Erste Schritte Fenster Und VB Funktionen Java Basics - Anfänger-Themen 8
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
0 Reguläre Ausdrücke und Funktionen Java Basics - Anfänger-Themen 2
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
B Ausgabe problem in Funktionen Java Basics - Anfänger-Themen 6
L Hat java keine virtuellen funktionen?? Java Basics - Anfänger-Themen 6
A Funktionen und Arrays Java Basics - Anfänger-Themen 2
C funktionen nur static? Java Basics - Anfänger-Themen 6
M MouseAdapter - auf Funktionen zugreifen Java Basics - Anfänger-Themen 13
L Funktionen addRow und deleteRow Java Basics - Anfänger-Themen 6
D Mathematische Funktionen Zeichnen Java Basics - Anfänger-Themen 2
D Variableninhalt über mehrere Funktionen ? Java Basics - Anfänger-Themen 3
Out.println Funktionen Java Basics - Anfänger-Themen 7
D Verständnisfrage zu Funktionen Java Basics - Anfänger-Themen 6
B Mathematische Funktionen Java Basics - Anfänger-Themen 3
D Warum sollte ich bestehende Funktionen "extend"en? Java Basics - Anfänger-Themen 32
M Statische und nicht-statische Funktionen: Desktop.browse(uri); Java Basics - Anfänger-Themen 4
N Funktionen berechnen in Java Java Basics - Anfänger-Themen 18
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
Q Nach Stringvorgabe bestimmte funktionen ausführen Java Basics - Anfänger-Themen 3
K zwei Funktionen, ein BufferedReader? Java Basics - Anfänger-Themen 8
A Static in Funktionen bringen Java Basics - Anfänger-Themen 7
J Funktionen in Java? Java Basics - Anfänger-Themen 3
A frage zur integration von funktionen anderer klassen Java Basics - Anfänger-Themen 2
T Funktionen Plotter - Klassen/Methoden/Funktionen Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben