Auf Objects zugreifen

wessi86

Mitglied
Hallo allerseits,
ich arbeite an einem Rollenspiel nach dem MVC-Konzept. Jetzt habe ich eine Maze-Klasse, in der die Monster erstellt werden, die Monster-Klasse natürlich und die Paint-Klasse.
Mein Problem besteht darin, dass ich es nicht schaffe aus der Paint-Klasse auf die erzeugten Monster-Objekte zuzugreifen.

Hier die relevanten Zeilen aus der Maze-Klasse:
Java:
Monster[] monster = new Monster[40];
[...]
public void setMonster() {
        int nr = 0;
        int x = 0;
        int y = 0;
       
        while (nr < monster.length) {
            x = rndNumber(118, 1);
            y = rndNumber(88, 1);
            if (maze[x][y] == 1 && maze[x+20][y] == 1 && maze[x][y+20] == 1
                     && maze[x+20][y+20] == 1) {
                for (int i = x; i < x+20; i++) {
                    for (int j = y; j < y+20; j++) {
                        maze[i][j] = nr+20;
                    }
                }
                monster[nr] = new Monster(x, y);
                nr++;
            }
        }
    }

Ich hab dann versucht, das so in der Paint-Klasse zu lösen.
Java:
Monster[] monster;
[...]

        for (int i = 0; i < 40; i++) {
            monster[i].DrawMonster(monsta, scrollX - 800, scrollY -600, g);
        }
    }
Dabei bekomm ich dann allerdings immer Nullpointer-Exceptions. Ich denke, dass ich das mit den Objekten nicht richtig gemacht habe. Vielleicht kann mir da mal jemand auf die Sprünge helfen.

Mfg, Christian

Edit: Ich habe es auch mit Setter/Getter versucht, wobei ich dann natürlich nicht mehr auf die Methoden der Monster-Klasse zugreifen kann.
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
[c]monster[/c] ist [c]null[/c], und darauf versuchst du [c]DrawMonster()[/c] (eigentlich sollte es [c]drawMonster()[/c] heissen) aufzurufen. Wie wärs mit einer statischen Methode?
 

Steff87

Aktives Mitglied
Hi!
Bevor du monster verwenden kannst, musst du es irgendwie initialisieren. Ansonsten ist es, wie faetzminator schon gesagt hat null und es wirft dir jedes mal eine NullpointerException. Entweder du machst statische Methoden oder du machst monster statisch, oder du initialisiert die monster-Variable in deiner paint-Methode.
 

wessi86

Mitglied
Hi!
Danke schonmal für die Antworten, allerdings hab ich es nicht hinbekommen. Hier mal die veränderten Klassen:
Maze-Klasse:
Java:
public static int[][] maze = new int[2400][1800];
public static Monster[] monster = new Monster[40];

public static void setMonster() {
    [..]       
}

Dann in der Paint-Klasse:
Java:
public void drawMonster(Image monsta, Graphics g) {
        for (int i = 0; i < 40; i++) {
            Maze.monster[i].drawMonster(monsta, scrollX -800, scrollY -600, null);
        }
}

Ich bekomme immer noch NP-Exceptions...
Hier vielleicht nocheinmal ein Paar Auszüge, aus der Klasse, welche das Applet startet:
Java:
@Override
    public final void run() {
        
        th.setPriority(Thread.MIN_PRIORITY);

        while (true) {
            //Wenn der Spieler ein neues Level betritt.
            if  (newLevel) {
                maze.fillMaze();
                maze.createRooms();
                Maze.setMonster();
                newLevel = false;
            }
[...]
            repaint();
            
            try {
                Thread.sleep(10);
            } catch (Exception ex) {
                System.out.println("Could not sleep :(");
            }
            th.setPriority(Thread.MAX_PRIORITY);
        }
    }

    @Override
    public final void paint(Graphics g) {       
        setMaze();
        drawMaze.drawMaze(stairs, background, wall, createdMaze, g);
        drawMaze.drawMonster(monsterImg, g);
        player.DrawPlayer(playerImg, g);
        drawMaze.drawInterface(createdMaze, fov, bar1, bar2, player.getLife(), player.getExp(), g);
        g.setColor(Color.WHITE);
        g.drawString("Level: " + levelCounter, 10, 20);
    }

mfg, Christian
 

Steff87

Aktives Mitglied
Überprüf in der drawMonster-Methode doch mal ob Maze.monster!=null ist.
Vielleicht wird diese Methode noch vor deiner Initialisierung aufgerufen und da ist ja noch alles null.
 

wessi86

Mitglied
Ok, das habe ich nun gemacht, allerdings scheint das Problem an der drawMonster-Methode der Monsterklasse zu liegen.

Java:
public void drawMonster (Image monster, int x, int y, Graphics g) {
        System.out.println("posX: " + posX);
        System.out.println("posY: " + posY);
        System.out.println(x);
        System.out.println(y);
        g.drawImage(monster, posX + x, posY + y, null);
    }

Die S-outs funktionieren alle...

mfg, Christian
 

Steff87

Aktives Mitglied
Ist das Bild monster überhaupt vorhanden?
Poste am besten mal deine Fehlernachricht.
Aus der kann man vielleicht mehr herauslesen.
 

wessi86

Mitglied
Ja, das Bild ist auch vorhanden. Ich habe jetzt versucht direkt in die Paint-Methode der Applet-Klasse eine for-Schleife einzubauen, in welcher die Monster gezeichnet werden. Und siehe da, von dort aus klappt es.
Java:
for (int i = 0; i < 40; i++) {
            Maze.monster[i].drawMonster(monsterImg, drawMaze.getScrollX() -800, drawMaze.getScrollY() -600, g);
        }

Wieso das auf diesem Weg funktioniert, versteh ich allerdings nicht... Hier mal der Fehlercode, wenn ich den Weg über die ausgelagerte Paint-Klasse gehe:
Java:
posX: 1600
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
posY: 740
x: -800
y: -600
sun.awt.image.ToolkitImage@219ce060
	at Model.Monster.drawMonster(Monster.java:42)
	at View.Draw.drawMonster(Draw.java:229)
	at Controller.DeluxeRPG.paint(DeluxeRPG.java:278)
	at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
	at sun.awt.RepaintArea.paint(RepaintArea.java:224)
	at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:310)
	at java.awt.Component.dispatchEventImpl(Component.java:4727)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Dieser Block wiederholt sich dann (ich schätze) 40 mal.

mfg, Christian
 

Steff87

Aktives Mitglied
Java:
...
	at Model.Monster.drawMonster(Monster.java:42)
	at View.Draw.drawMonster(Draw.java:229)
..

Wie ich annehme ist die Zeile 229 in der Draw-Klasse die hier
Java:
public void drawMonster(Image monsta, Graphics g) {
        for (int i = 0; i < 40; i++) {
            Maze.monster[i].drawMonster(monsta, scrollX -800, scrollY -600, null); //<--
        }
}

Wenn es geht, pack das ganze mal in ein zip-File und häng es an. Dann kann ich dir besser helfen. Zumindest mal ne Testklasse, damit ich den Fehler live sehen kann.
 

wessi86

Mitglied
Ja genau die ist es. Kannst du mir vielleicht noch erklären, wie ich Bilder aus dem Projekt-Ordner einfügen kann? Dann könnte ich das ganze zippen. Momentant liegen nämlich alle Bilder auf Laufwerk C: und ich lade sie so:
Code:
bar1 = new ImageIcon("C:\\bar1.png").getImage();
Hab mir im src-Ordner einen Ordner "Images" angelegt, weiß jetzt aber nicht, wie ich drauf zugreifen kann.

mfg, Christian
 

Steff87

Aktives Mitglied
Versuchs hiermit
Java:
URL urlimage = ClassLoader.getSystemResource(pathToPics);
Image img = new ImageIcon(urlimage).getImage();
pathToPics ist ein String mit dem Pfad zum Bild. z.B. util/image/bal.jpg
 

wessi86

Mitglied
Tut mir leid, funktioniert so nicht, oder ich gebe den Pfad falsch an. Ich hänge jetzt einfach den Projekt-Ordner an. Unter src/Images sind die Bilder zu finden. Vielleicht bekommst du das ja mit der korrekten Adresse hin oder du kopierst sie dir einfach auch auf Laufwerk C:.
Danke schonmal für die viele Mühe!
Aufgrund der Bilder kann ich die Zip-Datei leider hier nicht anhängen, da sie bei weitem zu groß ist. Ich lade sie dann auf einen OCH, hoffe das ist in Ordnung.

mfg, Christian

http://uploaded.to/file/d8qpyu9y
 

Steff87

Aktives Mitglied
Kein Thema. Ich helf doch gern.
Muss jetzt mal weg und komm erst spät wieder.
Ich kann frühestens morgen früh ab 8 wieder antworten.
Bis dahin hoffe ich, das Problem gefunden zu haben. Versuch aber auch es selber zu lösen. Ist die beste Übung.

Bis dann,
Stefan
 

Steff87

Aktives Mitglied
Hab den Fehler schon gefunden.
Ich hab aus lauter neugier es doch mal schnell ausprobiert und schnell den Fehler gefunden.
In der Klasse Draw Zeile 230:
Java:
public void drawMonster(Image monsta, Graphics g) {
        for (int i = 0; i < 40; i++) {
            if (Maze.monster[i] != null) {
                Maze.monster[i].drawMonster(monsta, scrollX -800, scrollY -600, g); //<--
            }
        }
    }

Du hast hier null übergeben. Du brauchst aber g als Parameter, da du es in der Methode verwendest. Dadurch hast du immer eine NullPointerException bekommen.

Hier auch noch die Anbindung der Bilder vom Projektordner aus:

Java:
        String pathToPics = "Images/";
        URL urlimage = ClassLoader.getSystemResource(pathToPics+"background.png");

        background = new ImageIcon(urlimage).getImage();
        urlimage = ClassLoader.getSystemResource(pathToPics+"bar1.png");
        bar1 = new ImageIcon(urlimage).getImage();
        urlimage = ClassLoader.getSystemResource(pathToPics+"bar2.png");
        bar2 = new ImageIcon(urlimage).getImage();
        urlimage = ClassLoader.getSystemResource(pathToPics+"wall.png");
        wall = new ImageIcon(urlimage).getImage();
        urlimage = ClassLoader.getSystemResource(pathToPics+"stairs.png");
        stairs = new ImageIcon(urlimage).getImage();
        urlimage = ClassLoader.getSystemResource(pathToPics+"fov2.png");
        fov = new ImageIcon(urlimage).getImage();
        urlimage = ClassLoader.getSystemResource(pathToPics+"monster.png");
        monsterImg = new ImageIcon(urlimage).getImage();
Hinzu zufügen in der Klasse deluxeRPG und die Bilderzuweisung ersetzen.

Nettes Spiel!
Viel Spaß noch damit.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
S Methoden Multi-Thread und Methoden Objects. Java Basics - Anfänger-Themen 1
G Moving Objects with Threads (implements Runnable) Java Basics - Anfänger-Themen 1
E Senden von Objects an Client. Variablenwerte kommen nicht an Java Basics - Anfänger-Themen 5
H Datentypen Casting objects Java Basics - Anfänger-Themen 29
W Objects speichern Java Basics - Anfänger-Themen 4
S Array of objects und ständige Constructor-Aufrufe Java Basics - Anfänger-Themen 4
D Objects-Wie realiesieren. Java Basics - Anfänger-Themen 4
G fehler bei erzeugen eines objects Java Basics - Anfänger-Themen 4
P probleme mit variablen eines Objects Java Basics - Anfänger-Themen 13
T Typsicheres casten eines Objects Java Basics - Anfänger-Themen 5
L array of objects in liste packen Java Basics - Anfänger-Themen 2
R Textfile vs Serialized Objects Java Basics - Anfänger-Themen 4
R Objects, arrays usw. Java Basics - Anfänger-Themen 5
B equals() der Klasse Objects liefert unerwartetes Ergebnis Java Basics - Anfänger-Themen 17
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
frager2345 Fensterklasse, Wie auf Frame im Listender zugreifen (ItemEvents) Java Basics - Anfänger-Themen 7
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
O Mit Instanz von Oberklasse auf Unterklasse zugreifen Java Basics - Anfänger-Themen 2
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
T Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen. Java Basics - Anfänger-Themen 2
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
S Auf Array aus Objekten zugreifen? Java Basics - Anfänger-Themen 1
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
X Auf Attribut einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 2
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
X Methode kann auf ArrayListe nicht zugreifen! Java Basics - Anfänger-Themen 10
F Auf Array einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 4
R Auf eine Stelle [i] des Arrays zugreifen Java Basics - Anfänger-Themen 7
L Wie kann man fehlerfrei im Java Code auf die fxml Datei zugreifen? Java Basics - Anfänger-Themen 26
CptK Auf ActionListener von anderer Klass aus zugreifen Java Basics - Anfänger-Themen 5
K Vererbung Auf Methoden von Unterklassen zugreifen Java Basics - Anfänger-Themen 6
G Klassen Mit fremder Klasse auf public Methode zugreifen Java Basics - Anfänger-Themen 23
J Hinzufügen eines Objekts in eine Liste, um später dann nochmal auf das Objekt zugreifen zu können Java Basics - Anfänger-Themen 8
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
D Auf ArrayList mit get zugreifen Java Basics - Anfänger-Themen 8
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
C Methoden Auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 10
P Auf JLabel zugreifen Java Basics - Anfänger-Themen 12
S Auf Array einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 13
das_leon Auf Ordner zugreifen (Vollzugriff) Java Basics - Anfänger-Themen 2
C return kann nicht auf variable zugreifen Java Basics - Anfänger-Themen 26
F Aus einer anderen Klasse auf ein JTextField zugreifen Java Basics - Anfänger-Themen 17
T Methoden Auf Variabler aus anderer Methode zugreifen Java Basics - Anfänger-Themen 5
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
L Auf Methoden einer Subklasse zugreifen ohne Typecast ? Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Klassen Von einer Klasse auf eine erbende Klasse zugreifen Java Basics - Anfänger-Themen 13
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
F [OOP] Auf eine Variable aus meherer Klassen zugreifen Java Basics - Anfänger-Themen 22
C OOP Von mehreren Klassen aus auf das selbe Objekt zugreifen Java Basics - Anfänger-Themen 8
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
J Best Practice Auf DefaultTableModel in andere Klasse zugreifen Java Basics - Anfänger-Themen 4
T Auf Instanz einer Liste zugreifen Java Basics - Anfänger-Themen 2
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
S Methoden Auf Methode der Unterklasse zugreifen? Java Basics - Anfänger-Themen 2
K OOP Mit anderer Klasse auf JTextField zugreifen Java Basics - Anfänger-Themen 5
D Von einem Objekt auf Properties zugreifen Java Basics - Anfänger-Themen 3
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
H Methoden Auf Methode zugreifen Java Basics - Anfänger-Themen 14
E Methoden Auf Methoden einer Klasse zugreifen, ohne ein Objekt zu erstellen Java Basics - Anfänger-Themen 2
N Auf TextFeld aus anderer Klasse zugreifen ohne es zu übergeben Java Basics - Anfänger-Themen 3
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
P auf superklasse zugreifen Java Basics - Anfänger-Themen 24
P auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 12
P aus ActionListener auf HauptFrame zugreifen Java Basics - Anfänger-Themen 4
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
D Methoden Wie können Klassen auf Klassenfremde Objekte zugreifen? Java Basics - Anfänger-Themen 7
H Klassen Auf eine Hashtable aus mehreren Klassen zugreifen Java Basics - Anfänger-Themen 12
D Auf equals von Vaterklasse zugreifen Java Basics - Anfänger-Themen 4
S Methode auf Main zugreifen Java Basics - Anfänger-Themen 5
C Aus mehrern Methoden auf selbes Array zugreifen Java Basics - Anfänger-Themen 4
K Nachträglich auf Objekte zugreifen Java Basics - Anfänger-Themen 2
B Klassen Auf Instanz anderer Klasse zugreifen Java Basics - Anfänger-Themen 1
S auf Array zugreifen Java Basics - Anfänger-Themen 2
D Best Practice Mit Java auf fremdartige Formate zugreifen. Java Basics - Anfänger-Themen 3
D Bei Objekt der Oberklasse auf Unterklassenmethode zugreifen? Java Basics - Anfänger-Themen 4
S Klassen Auf Objekt in Klasse A in Klasse B zugreifen Java Basics - Anfänger-Themen 4
C Klasse auf mehrere Objekte zugreifen lassen Java Basics - Anfänger-Themen 26
I Auf Methode zugreifen ( Objekt.Methode; ) Java Basics - Anfänger-Themen 1
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
G Auf Objekt der selben Klasse zugreifen Java Basics - Anfänger-Themen 2
D in Mainmethode auf Werte aus Klassenmethode zugreifen Java Basics - Anfänger-Themen 9
J In main erzeugtes objekt zugreifen. Java Basics - Anfänger-Themen 12
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben