Problem mit Klassen-/Methodenstruktur

stefancp

Mitglied
Hallo Leute,

ich habe mir mittlerweile diverse unterschiedliche (tlw. auch Video-) Tutorials angeschaut, zum Teil auch nur bis zur Hälfte. Dennoch ist mir noch nicht abschliessend klar, wie man sich die Struktur der Klassen, Methoden etc. am besten vorstellen kann und so scheint auch mein Problem, das ich hier
beschreibe, begründet zu sein. Ich möchte gerne ein simples Pferderenn bzw -wettspiel programmieren, das ich vor Jahren mal in Basic umgesetzt habe. Nun habe ich dafür eine public-Klasse PFERDE erstellt, in welcher dann die 8 verschiedenen Renner ihren Namen, ihre Nummer (1-8), ihr Alter und (per Zufall) eine Stärke bekommen. Später soll dann die Stärke Einfluss auf den Zufallsfaktor haben, der je "Runde" das Pferd um 1-10 Pixel vorwärts bringt. Das Pferd, das zuerst bei 500px angekommen ist, gewinnt.
Nun habe ich das Rennen (noch ohne Berücksichtigung der Stärke) sozusagen im Hintergrund schon
fertig und getestet. Jetzt möchte ich das ganze natürlich auch grafisch ausgeben und dafür ein JFrame verwenden auf denen jedes Pferd (erst einmal) als Rechteck dargestellt wird. Alle 8 Pferde sollen auf Bahnen untereinander von links nach rechts laufen. Das soweit zum Programm bisher.
Das Fenster wird auch schon geöffnet und es gibt auch schon eine kleine Klasse namens PferdSprite, die (bisher nur) ein Rechteck je Pferd erstellen und dann um die entsprechenden Anzahl Pixel je "Runde" vorwärts bringen soll. Nur funktioniert es nicht, das Objekt PferdSprite (im Code ganz unten) so einzubinden, wie ich es mir vorstelle.
Übrigens habe ich der Übersichtlichkeit halber wiederholte Codeteile (für die Pferde 2-8) raus genommen, da es hier darum geht, dass schon der erste Aufruf meiner PferdSprite-Klasse zum Fehler führt (NetBeans sagt: "cannot find Symbol / Symbol: Class PferdSprite / Location: class Pferde) und vermutlich der Fehler darin zu suchen ist, wo bzw. wie ich die Klasse erzeugt habe. Aber ich habe keine andere Möglichkeit gefunden.

Hier der (abgespeckte) Code:
Java:
import java.awt.*; 
import javax.swing.*; 



public class Pferde
{
    public static void main(String[] args)
    {

            C_Pferde Pferd1 = new C_Pferde ("Flocke",1,11,(int)(Math.random()*20+1));
            PferdSprite PS1 = new PferdSprite ("Flocke",0, 20);

            int Ziel_erreicht = 0;

            String Gewinner = "Keiner";
        
            
            do
            {

            StreckePferd1 = StreckePferd1+((int)(Math.random()*10+1));
            if (StreckePferd1 > Ziel_erreicht)
            {
                Ziel_erreicht=StreckePferd1;
                Gewinner = Pferd1.p_name;
            }
 
            
            
            } while (Ziel_erreicht < 500);

            System.out.println("Der Gewinner ist " + Gewinner + " mit " + Ziel_erreicht + "Schritten");

            
        PaintClass pc = new PaintClass();
        pc.setBackground(Color.yellow);
        pc.setTitle("Das Rennen beginnt!!");
        pc.setSize(1600,600); 
        pc.setVisible(true); 
            
    }
}


class C_Pferde
{
    String p_name;
    int p_nummer;
    int p_alter;
    int p_staerke;
    
    C_Pferde (String name_p, int nummer_p, int alter_p, int staerke_p)
    {
        p_name = name_p;
        p_nummer = nummer_p;
        p_alter = alter_p;
        p_staerke = staerke_p;
    }
    

    
}


class PaintClass extends JFrame
{ 
    public PaintClass()
    { 
        super(); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 
     
    public void paint(Graphics g)
    {
        super.paint(g);
        g.setColor(Color.red);
        g.drawLine(50,50,200,200); 
            
    	class PferdSprite
    	{
      
    		PferdSprite (String ps_name, int XPos, int YPos)
    		{
       		g.drawRect(XPos, YPos, 35, 15);
        	g.drawString(ps_name, XPos, YPos);
    		}
    	}
    }
}

Würde mich sehr freuen, wenn Ihr mir bei der Fehlersuche helfen könntet und mir dabei vielleicht etwas zum Verständnis helfen könntet.

Viele Grüße,
Stefan
 
Zuletzt bearbeitet von einem Moderator:

NobbyProg

Mitglied
Grundsätzlich: du kannst keine Klasse in einer Methode definieren. Heißt die Klasse PferdSprite muss aus der paint Methode raus.
Für diese Aufgabe (ein Pferd zeichnen) würde ich außerdem keine Klasse sondern eine Methode in der PaintClass schreiben. Die bräuchte dann als ein Parameter dein Graphics Object.
Alternativ benutzt du eine Extra Klasse PferdeSprite und definierst sie nach der PaintClass. Die Methode rufst du dann einfach in der paint Methode auf
 
Zuletzt bearbeitet:

coco07

Bekanntes Mitglied
@ NobbyProg
Klar kann eine Klasse in einer Methode definiert werden. Diese ist dann allerdings nur innerhalb der Methode sichtbar, eine Instanz kann also nur in der Methode erzeugt werden, in der die Klasse definiert ist. Diese Art von Klasse nennt sich dann lokale Klasse.

@stefancp
Da ich leider in Java keine Oberflächen implementiere, sage ich da mal lieber nichts zu ;)

grüße coco07!
 
Zuletzt bearbeitet:

stefancp

Mitglied
@ beide: Danke für die rasanten Antworten!
@ NobbyProg: Ich habe mal Deinen rat befolgt und die Klasse PferdSprite mit der Methode rausgenommen aus der Methode paint, aber dann kennt er (vermutlich natürlich) das "g" nicht mehr.
 

NobbyProg

Mitglied
@coco07 Soweit ich weiß wird eine lokale Klasse in einer anderen Klasse definiert, nicht in einer Methode, wie zum Beispiel die PaintClass. Tut mir leid wenn ich mich da irre.
 

stefancp

Mitglied
Hallo Nobby,

nun habe ich mich entschossen, das PferdSprite, wie von Dir vorgeschlagen, als Methode in der PaintClass zu erstellen und habe das so umgesetzt ...
Java:
class PaintClass extends JFrame
{ 
    public PaintClass()
    { 
        super(); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 
     
    public void paint(Graphics g)
    {
        super.paint(g);
        g.setColor(Color.red);
           
    }
    
    public void pferdSprite(Graphics g, String ps_name, int XPos, int YPos)
    {
        //super.pferdSprite(g); 
        g.drawRect(XPos, YPos, 35, 15);
        g.drawString(ps_name, XPos, YPos);
           
    }

Das scheint soweit funktioniert zu haben.

Und ich habe versucht, diese Methode dann in der MainMethode wie folgt aufzurufen:
Java:
PaintClass pc = new PaintClass();
pc.setBackground(Color.yellow);
pc.setTitle("Das Rennen beginnt!!");
pc.setSize(1200,400); 
pc.setVisible(true);
pc.pferdSprite(null, "Flocke", 20, 20);

Da zeigt zwar NetBeans erst mal keinen direkten Fehler mehr an, aber beim Ausführen vermeldet "er" dann folgendes ...
Exception in thread "main" java.lang.NullPointerException
at pferdewetten.PaintClass.pferdSprite(Pferde.java:201)
at pferdewetten.Pferde.main(Pferde.java:159)

Nun habe ich schon verschiedene Versuche durch und komme nicht dahinter, wo es hakt ....

Könntest Du mir da vlt. noch einen entscheidenden Tipp mehr geben?

VG Stefan
 

coco07

Bekanntes Mitglied
Nobby@ Eine Klasse welche innerhalb einer anderen Klasse aber außerhalb von Methoden definiert ist, nennt sich innere Klasse. Um eine Instanz dieser inneren Klasse zu erzeugen, muss erst eine Instanz der äußeren Klasse erzeugt werden.
Eine Klasse welche innerhalb von Konstruktoren oder Methoden definiert ist, nennt sich innere lokale Klasse.

stefancp@
Eine NullPointerException wird geworfen, sobald du irgendwo im Code versuchst, auf einer Referenzvariablen den Punktoperator anzuwenden und diese Variable gar keine Referenz auf ein Objekt enthält sondern 'null' referenziert.

Beispiel:
Java:
class Main {
public static void main(String... args){
Object o = null;
o.toString(); // Hier wird eine NullPointerException geworfen, da in dieser Referenzvariablen 'o' "nichts" enthalten ist. Sie referenziert auf 'null', was soviel wie "leer" heißt.
}
}

Übrigens muss man nicht explizit 'null' zuweisen, es wird nämlich auch implizit zugewiesen, wenn du der Variablen nicht explizit eine Referenz zuweist(dazu lies dir mal "Default-Werte" zu Java durch).

Hoffe ich konnte dir damit weiterhelfen.
Kleiner Tipp, der Fehler wird in Zeile 201 in deiner Pferde-Klasse geworfen ;)

grüße coco07!
 
Zuletzt bearbeitet:

stefancp

Mitglied
Hallo Coco,

danke für die wieder mal schnelle Antwort. Auf den ersten Blick habe ich es nur tlw verstanden, denke aber dass ich es blicke, wenn ich es ausprobieren kann. Das wird heute wohl nicht vor dem Abend sein, aber ich vermelde dann gerne, ob es geholfen hat.

VG Stefan
 

stefancp

Mitglied
Hallo Coco,

leider habe ich das mit der Fehlermeldung nicht weg bekommen. Nun habe ich aber erst einmal einen den Fehler auf meine Liste "Später klären, wenn ich erfahrener bin" gesetzt und einen anderen Weg eingeschlagen.

Danke trotzdem!

VG Stefan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
J Klassen Problem Java Basics - Anfänger-Themen 8
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
B Erste Schritte Problem bei der Verknüpfung von zwei klassen Java Basics - Anfänger-Themen 8
G Klassen Problem mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Erste Schritte Problem mit Klassen. Java Basics - Anfänger-Themen 15
J Problem mit Klassen und Methoden Java Basics - Anfänger-Themen 7
P Klassen Klassen mit Array Problem Java Basics - Anfänger-Themen 4
1 Klassen Problem Java Basics - Anfänger-Themen 6
megachucky regex-Problem ( mit den Klassen Matcher / Pattern) --> XML prüfen Java Basics - Anfänger-Themen 11
J Methoden/Klassen Problem Java Basics - Anfänger-Themen 9
F Klassen problem Java Basics - Anfänger-Themen 39
4 OOP Problem beim Speichern verschiedener Klassen in verschiedenen Dateien Java Basics - Anfänger-Themen 25
E 2 Klassen - Problem bei Methoden Java Basics - Anfänger-Themen 22
D Problem mit Klassen Bsp. Java Basics - Anfänger-Themen 3
A Taschenrechner - Problem mit zwei Klassen Java Basics - Anfänger-Themen 6
J Problem mit inneren Klassen und Klassenvariablen Java Basics - Anfänger-Themen 11
M Problem mit dem Klassen aus dem java.io Paket Java Basics - Anfänger-Themen 9
S Brauche Unterstützung bei Klassen-Problem. Java Basics - Anfänger-Themen 9
M [Einfaches Beispiel] Problem mit innere Klassen Java Basics - Anfänger-Themen 4
G Klassen Problem Java Basics - Anfänger-Themen 12
M Klassen-Problem Java Basics - Anfänger-Themen 5
K Wiederwerwenbare Klassen problem Java Basics - Anfänger-Themen 3
L Suche Hilfe , Problem mit Vektoren und klassen Java Basics - Anfänger-Themen 21
G Problem mit Objekten und Klassen. Java Basics - Anfänger-Themen 2
G Problem mit zwei Klassen Java Basics - Anfänger-Themen 8
T Methoden / Klassen Problem Java Basics - Anfänger-Themen 11
G Klassen Problem Java Basics - Anfänger-Themen 12
G Problem mit Klassen Java Basics - Anfänger-Themen 32
A problem: importieren von eigenen klassen Java Basics - Anfänger-Themen 3
frau-u Problem mit Klassen und Vererbung - benutzen von Methoden Java Basics - Anfänger-Themen 2
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
G Problem mit PHP Klassen Java Basics - Anfänger-Themen 3
P Externe Klassen Problem - Eclipse Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben