# Fehler bei Methodenaufruf



## Guest (4. Jul 2008)

Hallo,

ich bekomme immer die Fehlermeldung "non-static Method startproc cannot be referenced from a static context" wenn ich versuche eine Methode in einer anderen Klasse aufzurufen!

Aufruf der Methode:


```
Start.startproc(args);
```

Methode in der anderen Klasse "Start"


```
public void startproc( String[] args ) {
this.CurrentDirectory();    
Integer i = args.length; 
if (i == 2)
Rootpath = args[0];  
MainConfiguration = args[1];
```

mfG


----------



## Gast (4. Jul 2008)

Wenn du die Methode aufrufen willst, muss sie statisch sein. Also musst du im Methodenkopf 
	
	
	
	





```
public static void
```
 anstatt nur 
	
	
	
	





```
public void
```
 schreiben.


----------



## Gast (4. Jul 2008)

Aber wenn ich sie als statisch deklariere bekomme ich Fehlermeldungen bei allen Variablenzuweisungen:

non static variable this cannot be referenced from a static context
non static variable Rootpath cannot be referenced from a static context
non static variable MainConfiguration cannot be referenced from a static context

und so weiter...


----------



## Marco13 (4. Jul 2008)

FAQ: http://www.java-forum.org/de/viewtopic.php?t=7895 
Dort gibt's auch noch andere Themen zu static...


----------



## Gast (4. Jul 2008)

Ich weiß jetzt nicht genau, ob es funktioniert wenn du einfach die Klasse mit 
	
	
	
	





```
static class
```
 statisch machst, oder ob auch alle Variablen statisch sein müssen. Probiers mal aus.


----------



## Marco13 (4. Jul 2008)

Du kannst auch von 1 bist 10^100000000000 zählen, jede Zahl als die Gödelnummer eines Programmes ansehen, das entsprechende Programm erstellen, compilieren, gucken ob das geht, und wenn ja, dann prüfen, ob das Programm das ist, das du haben wolltest.


----------



## Gast (4. Jul 2008)

Stimmt, könnte man machen. Hast du schon damit angefangen? ;-)


----------



## Gast (4. Jul 2008)

Erst bringt er so geniale Ideen und dann schreibt er nicht mehr zurück.


----------



## maki (4. Jul 2008)

Gast hat gesagt.:
			
		

> Wenn du die Methode aufrufen willst, muss sie statisch sein. Also musst du im Methodenkopf
> 
> 
> 
> ...


So ein Quatsch, da führt mal wieder ein Blinder den Blinden...

Und dann? Trial&Error der extra-langweiligen Sorte..

Der Hinweis auf das Lehrbuch war genau richtig, für alle Gäste hier im Thread.


----------



## Gast (4. Jul 2008)

ich habe mir den Beitrag im Forum angeschaut...es ist mir trotzdem nicht möglich die Methode aufzurufen.Auch wenn ich die Klasse als statisch deklariere bekomme ich dieselbe Fehlermeldung!


----------



## SlaterB (4. Jul 2008)

da du in der Operation this. benutzt solltest du statisch vergessen,
(edit: falls das nicht auch falsch eingesetzt ist..)

nicht-statische Operationen kannst du nur an einem Objekt der Klasse aufrufen, nicht an der Klasse selber


----------



## Gast (4. Jul 2008)

Das this habe ich schon weggenommen, trotzdem bekomme ich dann die fehlermeldung das ich keine nicht statischen methoden aufrufen darf und auch keine nicht statischen Variablen


----------



## SlaterB (4. Jul 2008)

wie 'trotzdem'? das this hatte mit dem Fehler an sich nix zu tun


----------



## Gast (4. Jul 2008)

ich habe immer noch den gleichen Fehler wie am Anfag beschrieben. Ich würde die Methode einfach nur gerne aus einer anderen klasse aus aufrufen und den Parameter args übergeben!Das Funktioniert aber nicht wenn die Methode nicht statisch ist und auch nicht wenn ich sie als statisch deklariere, weil ich dann probleme mit den Variablen und anderen Methodenaufrufen bekomme


----------



## SlaterB (4. Jul 2008)

ja und? dann musst du diese Probleme lösen!

es gibt nur eine Art, eine Methode aus einer anderen Klasse direkt an der Klasse aufzurufen: sie statisch zu machen,

das musst du als Fortschritt sehen, damit funktioniert schon mal was,
wenn dann anderes nicht funktioniert, dann musst du das auch korrigieren und doch nicht diese einzige Möglichkeit ausschließen


----------



## Marco13 (4. Jul 2008)

Entweder, es muss alles statisch sein, was mit dieser Methode zu tun hat (also die Methode selbst und alle Variablen, die sie verwendet) oder du musst eine Instanz der Start-Klasse erstellen. Du solltest dir genau überlegen, ob du das eine oder andere haben willst.


----------



## Gast (4. Jul 2008)

Ich habe sie als statisch deklariert und deshalb schreibe ich auch in dieses Forum, weil ich nicht weiter weiss. Das ist der Sinn und zweck eines Forums!Wenn du den Beitrag von mir weiter oben liesst siehst du das ich das gemacht habe und wieder neue Fehlermeldungen bekomme!aus diesem Grund frage ich auch hier wie ich diesen Fehler beheben kann!


----------



## ARadauer (4. Jul 2008)

der Grundgedanke des Schlüsselwort static ist, etwas satic zu machen. Und nicht, einfach mal probieren, weils anders nicht geht. wenn man nicht weiß was static macht, dann muss man nachlesen. oben is schon mal ein link gekommen.

java lernt man nicht durch try and error


----------



## ARadauer (4. Jul 2008)

aja poste mal den ganzen code


----------



## SlaterB (4. Jul 2008)

Gast hat gesagt.:
			
		

> Wenn du den Beitrag von mir weiter oben liesst siehst du das ich das gemacht habe und wieder neue Fehlermeldungen bekomme!


möchtest du jetzt, dass jemand einzeln aufzählt
"Variable X muss auch statisch sein"
"Variable Y muss auch statisch sein"
"Operation Z muss auch statisch sein"

das sollte doch wohl klar sein, wenn die erste Operation schon statisch gemacht worden ist,
eine derartige Wiederholung ohne Lerneffekt ist auch nicht Sinn des Forums


----------



## Gast (4. Jul 2008)

@Slater: Pass auf sonst kannst du dir was von maki anhören ;-).

Als ich vorher geschrieben habe 





> Wenn du die Methode aufrufen willst, muss sie statisch sein.


 musste ich mir anhören: 





> So ein Quatsch, da führt mal wieder ein Blinder den Blinden...


----------



## Marco13 (4. Jul 2008)

Gast hat gesagt.:
			
		

> Ich habe sie als statisch deklariert und deshalb schreibe ich auch in dieses Forum, weil ich nicht weiter weiss. Das ist der Sinn und zweck eines Forums!Wenn du den Beitrag von mir weiter oben liesst siehst du das ich das gemacht habe und wieder neue Fehlermeldungen bekomme!aus diesem Grund frage ich auch hier wie ich diesen Fehler beheben kann!



Und wenn du meinen Beitrag liest, siehst du, dass ich unmißverständlich gesagt habe, dass ALLES, was mit dieser Methode zu tun hat, dann auch statisch sein muss (auch alle Variablen, die sie verwendet). Das ist nur SEHR selten angebracht - insbesondere, weil diese Methode ja was in die Variablen reinschreibt, was später wieder ausgelesen werden soll. Vielleicht resultiert die Intention, die Methode statisch zu machen, auch aus einem grundsätzlichen Denk- oder Designfehler. Vielleicht resultiert der ganze Thread auch aus der fragwürdigen Annahme, das Forum wäre dazu da, so lange Codeschnipsel und Fehlermeldungen zu posten, bis man irgendwas hat, was sich compilieren läßt.....


----------



## Michael... (4. Jul 2008)

Anonymous hat gesagt.:
			
		

> ```
> Start.startproc(args);
> ```


Du rufst die Methode in eine statischen Kontext auf, wenn das wirklich so gewünscht ist müssen die Variablen in der Methode ebenfalls statisch sein.
Wenn nicht musst du eine Instanz der Klasse Start erzeugen und die Methode mittels dieser Instanz aufrufen.

```
Start startInstanz = new Start();
startInstanz.startproc(args); //nicht statisch
Start.startproc(args); //statisch
```


----------



## Gast (4. Jul 2008)

Ich finde es merkwürdig, dass du scheinbar der Meinung bist, man sollte stundenlang suchen und über etwas disskutieren, anstatt es einfach auszuprobieren. Aber ok...


----------



## Marco13 (4. Jul 2008)

Dieses "Ausprobieren" war das, worauf sich die Antwort mit der Gödelnummerierung bezog :roll: Manchmal sollte man auch Sachen _LESEN_ und _NACHVOLLZIEHEN_ - schon allein weil es sonst vielleicht irgendwann funktioniert, aber man nicht weiß, WARUM es funktioniert.....


----------



## Gast (4. Jul 2008)

Aber dann weiß man zumindest, dass es so funktioniert. Besser als man weiß garnichts...


----------



## Tobias (4. Jul 2008)

Klar. Dinge die heute SO funktionieren scheinen morgen ganz ANDERS zu gehen, weil man das zugrundeliegende Prinzip nicht durchschaut hat. Zum Lernen ist das Begreifen der Zusammenhänge doch elementar ...

Just my 2 cents.


----------



## Gast (4. Jul 2008)

Natürlich ist es das, aber ich glaube, dass es einfacher ist herauszufinden warum etwas so funktioniert wie es funktioniert, als von Grund auf alles durch irgendwelche Threads im Forum herausfinden zu wollen. Hätte der Ersteller des Threads ein funktionierendes Programm (oder eine Klasse) gehabt und gefragt, warum es so funktioniert, wäre es wahrscheinlich gar nicht zu dieser Diskussion gekommen.


----------



## maki (4. Jul 2008)

> Hätte der Ersteller des Threads ein funktionierendes Programm (oder eine Klasse) gehabt und gefragt, warum es so funktioniert, wäre es wahrscheinlich gar nicht zu dieser Diskussion gekommen.


Hätte der Ersteller des Threads sich die minimalen Java Grundlagen angeeignet wäre es nie zu diesem Thread gekommen.
Hätte er den Rat angenmommen und diese Grundlagen studiert, wüsste er jetzt zumindest ungefähr worum es geht und könnte speziellere/bessere Fragen stellen, dass würde ihm wirklich helfen.

Aber ein kleines bisschen Bereitschaft zum lernen muss man schon mitbringen, sonst ist das ganze nur Zeitverschwendung.


----------



## Leroy42 (5. Jul 2008)

Gast hat gesagt.:
			
		

> Natürlich ist es das, aber ich glaube, dass es einfacher ist herauszufinden warum etwas so funktioniert wie es funktioniert, als von Grund auf alles durch irgendwelche Threads im Forum herausfinden zu wollen.



Weder noch!  :noe: 

Wenn man noch nicht mal weiß, was static eigentlich bedeutet,
sollte man erst einmal ein Tutorial durcharbeiten,
bevor man etwas _von Grund auf durch irgendwelche Threads im Forum herausfinden will_  :shock:


----------



## Gast (5. Jul 2008)

Da hier anscheinend alle gegen mich sind und meinen, dass es gar nicht um die Funktion eines Programmes geht, war das hier meine letzte Antwort. Wünsch euch noch einen schönen Tag, ciao


----------

