non-static Methode ausführen in statischen Kontext

ankmanu

Bekanntes Mitglied
Hi @ all,

ich hab mal wieder ein (wahrscheinlich sehr kleines ) Problem:

Mein Code sieht gekürzt so aus:
Java:
public static void Action() {  
...
 invalidate();
...
}
Das Problem liegt darin, dass die Methode invalidate(); nicht-statisch ist, Action() aber schon. Ich kann Action() nicht einfach nicht-ststisch machen(public void Action(){}), weil andere Methoden darin statisch sein müssen!

Wie kann ich also trotzdem invalidate ausführen??

Viele Grüße und danke schonmal für eure Antworten

manu
 

Ruzmanz

Top Contributor
Wenn du invalidate() aufrufen willst, dann kannst du sie auch einfach statisch machen. Das muss dann funktionieren oder du hast einen Logikfehler drinnen. Methoden sind übrigens immer klein.
 

hdi

Top Contributor
Ich kann Action() nicht einfach nicht-ststisch machen(public void Action(){}), weil andere Methoden darin statisch sein müssen!

Macht doch nix! Du kannst in nicht-statischen Methoden statische Methoden jederzeit aufrufen. Genau das heisst ja statisch: Du brauchst keinen Kontext (Objekt), du kannst sie überall per KlassenName.methode() aufrufen. (Sofern sie sichtbar sind, siehe public, private usw).

Nur andersrum funktioniert es nicht, falls du kein Objekt hast, weil nicht-statisch eben heisst es hängt ab von einem Objekt.

Wenn invalidate() nicht-statisch sein muss weil es sich auf Objekte bezieht, dann übergib der Methode doch das Objekt sofern du es an der Stelle des Aufrufes hast:

Java:
public static void action(YourObject o) {  
...
o.invalidate();
...
}

Wenn das auch nicht klappt hat mein Vorredner wohl recht mit der Annahme, dass du dich da einfach in nen Design-Schlamassel reingecodet hast ;) Dann musst du das ganze nochmal überdenken und überlegen was statisch sein muss, was nicht, und wie du Objekte an eine Stelle bekommst wo du sie brauchst.

P.S.:
Methoden sind übrigens immer klein.
Da hat er völlig recht! Damit meint er die Namen. Nicht "Action" sondern "action" bitte, das ist eine Konvention.
 
Zuletzt bearbeitet:

Haave

Top Contributor
Sowas hier wird nicht klappen:
Java:
public class Stuff {
	
	public static void main(String[] args) {
		Stuff s = new Stuff();
		s.yay();
	}
	
	public void yay() {
		System.out.println("yay!");
	}
	
	public static void something() {
		yay(); //Problem! Wessen yay() soll das sein? yay() muss ja von einem Objekt aufgerufen werden!
	}
}

Es ist allerdings kein Problem, wenn du eine nicht-statische Methode machst und darin andere statische Methoden (wie z.B. Math.round()) benutzt:
Java:
public void something() {
	double d = 3.22;
	int x = (int)(Math.round(d));
}
public static void main(String[] args) {
	s.something();
}


Hast du dein [c]Action[/c] btw. tatsächlich so genannt? Methodennamen schreibt man immer klein, Klassennamen immer groß.

EDIT: Zu langsam xD
 
Zuletzt bearbeitet:

ankmanu

Bekanntes Mitglied
okay, jetzt hab ich mal folgendes gemacht:
Java:
public static void action() {      
...
invalidate();
...
}
Problem: bei invalidate(): non-static method invalidate can not be referenced from static context.

Muss ich dann erst ein Objekt erzeugen oder wie geht das?

Viele Grüße
manu
 
Zuletzt bearbeitet:

ankmanu

Bekanntes Mitglied
Hi nochmal,

wenn ich folgendes schreib:
Java:
public static void action(Object o) {      
...
o.invalidate();
...
}
dann klappt das erstmal! Aber wie muss ich dann Action aufrufen??

mit action(o) geht das ja nicht... Ich muss das Object doch irgendwie definieren?

Viele Grüße
manu
 
G

gman

Gast
Hi,

in deinem vorherigen Code hast du "invalidate()" einfach so aufgerufen, von daher geh ich mal davon
aus das die Methode in derselben Klasse ist wie "action()". Das bedeutet, das du in deinem letzten
Code-Beispiel eben die Klasse nehmen kannst/musst anstatt "Object".

Java:
public static void action(<KlasseInDerDieMethodenStehen> o){
    ...
    o.invalidate();
    ...
}

Das setzt natürlich voraus, das du ein Objekt von der Klasse hast wenn du "action()" aufrufst.
 

ankmanu

Bekanntes Mitglied
Hi,

sorry, aber ich kriegs einfahc nicht hin:

der Klassenname ist name
der name der methode ist action

es geht weder mit
Java:
name.invalidate();
--> Fehler: non-static variable ... couldnt be referenced...
noch mit
Java:
action.invalidate();
--> Fehler: cannnot find symbol

Wie kann ich das Problem denn lösen?

Viele Grüße
manu

EDIT: wenn ich es so schreibe:
Java:
public static void action(name o){
...
o.invalidate();
...
}
dann geht es auch nicht!

Wie muss ich denn dann action(???) aufrufen?

Grüße
manu
 
Zuletzt bearbeitet:

Haave

Top Contributor
Du solltest vielleicht mal mehr Code zeigen, es ist ziemlich schwierig nachzuvollziehen, worauf sich deine Fehlermeldungen genau beziehen. Poste wohl am besten mal die ganze Klasse, damit man sich einen Überblick verschaffen kann.
 

Ruzmanz

Top Contributor
Dachte du wolltest Action() aufrufen. Naja wenn das in der Klasse drinnen ist, dann solltest du nichts dazu schreiben:

Java:
public static void action(Object o){
    //...
    invalidate();
    //...
}

Aber du brauchst invalidate() static machen ... z.B.:

Java:
public static void invalidate() {

}
 

ankmanu

Bekanntes Mitglied
Tut mir Leid , die ganze Klasse ist zu lang...

aber stark gekürzt:

Java:
public class RobProgMAIN extends JFrame implements ActionListener 

{
...
public static void main(String[] argv)                                          /**MAIN*/
{
final RobProgMAIN mainApp;
mainApp = new RobProgMAIN();
}
public RobProgMAIN()
{
...
}
public static void testa(){
...
try {
System.out.println("DFish : started");
SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        
       action();
      }
});


// System.out.println("okok");
}
catch(FishFaceException eft) {
fehlerl.setText(fehlerl.getText()+ eft);
fehler.setVisible(true);  
}
}
public static void action(){
...
invalidate();
...
}
}

Viele Grüße
manu
 

Haave

Top Contributor
Du solltest dir vielleicht erst einmal die Grundlagen aneignen, ehe du mit GUI-Programmierung, Multithreading und dem ganzen Kram herumwerkelst…
Schnapp dir ein gutes Tutorial, mit dem du schrittweise Java lernen kannst, und lerne die Dinge aufeinander aufbauend. Es bringt nichts, wenn du das fünfte Stockwerk bauen willst, ehe das Fundament steht ;)
 

ankmanu

Bekanntes Mitglied
das ist mir schon klar, und ich weiß dass ich mich noch einarbeiten muss, die Sache ist nur die, dass ich dieses Programm bis in 4 Wochen komplett fertig haben muss...

Also wäre es schn, wenn ihr mir dort helfen könntet und ich mich dann nochmal um die Grundlagen (Tutorials) kümmere.

Viele Grüße
manu
 
G

gman

Gast
So sehr viel mehr kann man aus dem letzten Code auch nicht erkennen. Es ist vielleicht wirklich am
einfachsten wenn du "invalidate()" static machst.
 

hdi

Top Contributor
@ankmanu

Klick mal den Link in meiner Signatur.
Damit solltest du die wichtigsten Dinge relativ schnell drin haben.

Nochmal zum static/non-static:

Wenn etwas nicht statisch ist (egal ob Methode oder Variable) heisst es, dass es sich auf ein Objekt bezieht. Weisst du was ein Objekt ist? Als Objekt bezeichnet man Daten von einem komplexen Datentyp, salopp ausgedrückt alles was ein Konstrukor zurückliefert:

Java:
MyClass object1 = new MyClass();
MyClass object2 = new MyClass();

Wenn eine Variable nicht-statisch in der Klasse definiert ist bedeutet das, das jedes einzelne Objekt einen eigenen Wert dafür hat. Sagen wir "MyClass" hat eine Variable:

Java:
class MyClass{
   int var; // nicht-statisch 
}

die ist nicht-statisch, das heisst der Wert var von object1 könnte 19 sein, der von object2 vllt 54.
Deshalb kannst du ohne ein konkretes Objekt - d.h. im statischen Kontext - nicht wissen was der Wert ist:

Java:
System.out.println( MyClass.var ); // <- ist das nun 19 oder 54? Das weiss man nicht daher geht das nicht

Du musst also ein Objekt haben:

Java:
System.out.println( object1.var ); // ok, Wert ist 19

So, und jetzt musst du dir nur eine Frage stellen:
Was auch immer deine invalidate() Methode macht: Ist sie irgendwie abhänig vom Objekt? Verändert oder benutzt sie irgendetwas, das sich bei verschiedenen Instanzen (=Objekten) der Klasse unterscheiden kann? Wenn das nicht der Fall ist und sie tut eh immer nur das selbe, unabhängig von einem bestimmten Objekt, kannst du sie static machen, und damit sind deine Problem gelöst.

Brauchst du aber Infos von einem bestimmten Objekt, muss sie nicht-statisch sein.
In dem Fall musst du ein Objekt haben bevor du sie aufrufen kannst.
Und ja, das musst du natürlich vorher erstellen wenn du es zB in die action() Methode reinreichen willst.

Ob du jetzt solche Instanzen deiner Klasse brauchst oder nicht lässt sich nicht sagen solange man nicht versteht was du da eigentlich programmieren willst.
 

ankmanu

Bekanntes Mitglied
okay, der sinn des ganzen war, ein vorhandenes JFrame zu aktualisieren, weil zum Beispiel bestimmte Texte in Textfelder nicht mehr eingefügt wurden...

Um das Fenster zu aktualisieren, habe ich gegoogelt und gefunden, dass es eigentlich mit invalidate(); gehen müsste, das Fenster zu aktualisieren. Doch als ich das einfügte, kam eben der non-static/static Fehler. Und dafür wollte ich nun eine Lösung/Erklärung haben.

Ich weiß nicht ob es hilft, aber vielleicht gibt es ja auch eine andre Möglichkeit, das Fenster zu aktualisieren...

Wenn ich Code posten soll, dann mach ich das morgen. (hab jetzt keine zeit mehr). Das Programm geht einfach bis Zeile XY und in Zeile XY+1 steht dann etwas wie textPane3.setText("texttest"); , aber dieser Text erscheind nicht mehr!!!

Wie gesagt, morgen werde ich Code posten, aber wenn schon jemand helfen kann, dann gerne :)

Viele Grüße
manu
 

hdi

Top Contributor
Ja ok, invalidate() von JFrame ist eine nicht-statische Methode. Du kannst das auch nicht ändern, weil du die Methode ja nicht selber geschrieben hast sondern nur aus der Bibltiothek verwendest.

Also musst du sie halt auf deinem JFrame aufrufen:

Java:
myFrame.invalidate();

Hast du dir das Frame überhaupt in eine Variable abgespeichert?

Java:
JFrame myFrame = new JFrame();

Jetzt musst du den Methoden-Aufruf halt an eine Stelle packen, wo du Zugriff auf die Variable "myFrame" hast. Da gibt's mehrere Möglichkeiten.

1) Du deklarierst die Variable "global", d.h. zB als Klassenvariable

Java:
class MyProgram{

   JFrame myFrame;

   public static void main(String[] args){
          myFrame = new JFrame();
          //...
   }

   // ...

  public void action(){
          myFrame.invalidate();
  }
}

2) wenn jetzt deine action-Methode keinen direkten Zugriff drauf hat, zB weil sie in ner ganz anderen Klasse liegt, musst du ihr das Fenster halt als Parameter übergeben, so wie ich es ein paar Posts vorher gezeigt hatte.

Dann musst du natürlich nach wie vor die action() Methode von einem Ort aufrufen, wo du Zugriff auf das Frame hast. ISt also eig. der gleiche Fall wie 1) nur halt über einen Umweg.

So, abgesehen davon:
- Wenn man es richtig macht aktualisiert sich die GUI immer automatisch, aber das ist jetzt n ganz anderes Thema das ich nich anschneiden möchte (Falls du googlen willst: Stichwort "EDT")
- invalidate() ist auch nicht wirklich die richtige Methode für dein Vorhaben. Statt invalidate auf dem frame solltest du erstmal ein repaint() auf dem textfeld versuchen
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
B non static interface Methode Java Basics - Anfänger-Themen 16
S Static void Methode Java Basics - Anfänger-Themen 12
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
P Objekte übergeben Parameter vs. Static Methode Java Basics - Anfänger-Themen 7
J Warum muss diese Methode static sein ?! Java Basics - Anfänger-Themen 7
Luk10 static - methode Java Basics - Anfänger-Themen 7
braindump Methode angeblich static?! Java Basics - Anfänger-Themen 4
N static Methode nicht erreichbar Java Basics - Anfänger-Themen 6
C Aufruf von Klassen aus einer STATIC Methode mit Parameter Java Basics - Anfänger-Themen 2
B Problem mit einer static void Methode Java Basics - Anfänger-Themen 8
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Static Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
L non-static Fehler Java Basics - Anfänger-Themen 16
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
NormanPatrickBenner static non-static Java Basics - Anfänger-Themen 82
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
T Static Fehler Java Basics - Anfänger-Themen 1
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
K static, non-static Krise Java Basics - Anfänger-Themen 4
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29

Ähnliche Java Themen

Neue Themen


Oben