Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
01.02.2010, 00:41
blaba



Guten Abend :)

Ich versuche in meinem Schulprojekt eine Klasse auszulagern um den Quellcode übersichtlicher zu gestalten. Die ausgelagerte Klasse soll auf einer Canvas ein Spielfeld zeichnen.

Die Canvas liegt schon außerhalb der Hauptdatei und wenn ich in der Hauptdatei auch diese ausgelagerte Methode aufrufe, dann funktioniert das auch. Nun hab ich aber alles was gezeichnet werden soll mit einem Button verbunden und möchte nun aber, dass der Button eine Klasse aufruft, in der alle Zeichnungsanweisungen gespeichert sind und diese Klasse außerhalb der Hauptdatei haben. Ich hoffe das ist verständlich O:-) Ich füge mal den (gekürzten) Quellcode hinzu für den betroffenen Teil:
Quellcode:public void button1_ActionPerformed(ActionEvent evt) {


    int koord=40;
    for(int i=0;i<=3;i++){
      feld1.maleFeld(120,i*koord);
     }
    feld1.maleFigurenstart(0,0);                                                  //Blaue Spielfiguren
    feld1.maleFigurenstart(0,40);
    feld1.maleFigurenstart(40,0);
}

Also wie gesagt, möchte ich die "Innereien" des Buttons ausgelagert haben.

Ansatz war bisher:

Quellcode:public class StartZiel extends Spielbrett{
public void sz1(){

int koord=40;
    for(int i=0;i<=3;i++){
      feld1.maleFeld(120,i*koord);
     }
    feld1.maleFigurenstart(0,0);                                                  //Blaue Spielfiguren
    feld1.maleFigurenstart(0,40);
    feld1.maleFigurenstart(40,0);
}
}

und in der Hauptdatei:

Quellcode:public void button1_ActionPerformed(ActionEvent evt) {
StartZiel.sz1();
}
Dieser Code produziert mir aber den Fehler :

Zitat:
non-static method sz1() cannot be referenced from a static context
Jemand eine Idee, wie ich das "Problem" lösen kann?

Vielen Dank im Vorraus :)

--

Ich bin keine Signatur, ich putz hier nur...

zum Seitenanfang zum Seitenende Profil || Suche
001
01.02.2010, 01:20
LeJean



Du kannst keine nicht-statische Methode statisch aufrufen.
Quellcode:szfoo = new StartZiel();
szfoo.sz1();
;)

Editiert:
Wenn du einfach StartZiel.sz1() aufrufen willst, dann ist das ein statischer Zugriff, da du direkt über den Klassennamen eins ihrer Member (Methoden) auszuführen versuchst. Du musst natürlich zuerst ein Objekt der Klasse StartZiel initialisieren, um auf diesem Objekt die passende Methode aufrufen zu können. Oder aber du machst die Methode sz1() statisch (static-Schlüsselwort davor), dann kannst du sie auch ohne Initialisierung direkt über Klassenname.methode() aufrufen.

Edit2: Schneller :P

Edit3: Naja äh... *hust* -- ich hab hier noch so viel Zeug zu tun... .__.

--


Dieser Beitrag wurde am 01.02.2010 um 01:26 von LeJean bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
01.02.2010, 01:21
Bluthund



Wenn du eine Methode aufrufen willst, brauchst du natürlich auch eine Instanz deiner Klasse für die die Methode aufgerufen wird.
Benötigt die jeweilige Methode keinen Objektbezug um ihre Arbeit zu verrichten, kannst du sie mit dem Schlüsselwort static als statisch markieren. Damit hat die Methode Klassenbezug statt Objektbezug und du kannst sie über den Klassennamen rufen.
Das sagt auch eigentlich alles der Compilerfehler... Du kannst die nicht-statische Methode sz1() nicht in einem statischen Kontext (nämlich StartZiel.) referenzieren.

edit: Jean mach mal lieber an fragrun weiter anstatt hier Java-Fragen zu beantworten :D

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 01.02.2010 um 01:25 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
01.02.2010, 01:30
blaba



Okay habe nun einfach die Canvas feld1 Klasse auf static gesetzt und sz1 auch auf static, scheint zu funktionieren. wenn ich nur sz1 auf static setze, dann meckert der bei feld1 herum, dass dieses nicht static ist und darum hab ich das schlicht und einfach auch static gesetzt.

vielen dank :)

falls ich nochmal ein Problem bekommen sollte, schreib ich das einfach in diesen Thread wenn das okay ist?! Vielleicht kann jemand den Titel irgendwie passend umbenennen falls nötig?

--

Ich bin keine Signatur, ich putz hier nur...


Dieser Beitrag wurde am 01.02.2010 um 01:45 von blaba bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche