Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LsFan

Frischling

  • »LsFan« ist der Autor dieses Themas

Beiträge: 29

Beruf: Der Böse Admin sein xD

  • Private Nachricht senden

1

27.10.2013, 13:23

Java Image Array wird nicht gezeichnet?!?!

Hi Leute,

Ich arbeite in Java an einer Art Minecraft 2D und habe neben den JFrames (Hauptmenü und GameWindow) auch schon die Terrain Klasse. Die Funktioniert so:

In einem 2dimensionalen String Array (30 x 20) werden die Dateinamen von den Blöcken eingelesen (Habe bis her nur einen). Diese benutze ich dann un ein Bild eines Image Arrays zu zeichnen. Wenn ich aber das Spiel starte kommt in der Konsole diese Fehlermeldung:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)

    at lsp.ae.de.Terrain.<init>(Terrain.java:34)

    at lsp.ae.de.GameWindow.CreateWindow(GameWindow.java:12)

    at lsp.ae.de.MainMenu$1.actionPerformed(MainMenu.java:43)

    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

    at java.awt.Component.processMouseEvent(Unknown Source)

    at javax.swing.JComponent.processMouseEvent(Unknown Source)

    at java.awt.Component.processEvent(Unknown Source)

    at java.awt.Container.processEvent(Unknown Source)

    at java.awt.Component.dispatchEventImpl(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

    at java.awt.Container.dispatchEventImpl(Unknown Source)

    at java.awt.Window.dispatchEventImpl(Unknown Source)

    at java.awt.Component.dispatchEvent(Unknown Source)

    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

    at java.awt.EventQueue.access$200(Unknown Source)

    at java.awt.EventQueue$3.run(Unknown Source)

    at java.awt.EventQueue$3.run(Unknown Source)

    at java.security.AccessController.doPrivileged(Native Method)

    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)

    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)

    at java.awt.EventQueue$4.run(Unknown Source)

    at java.awt.EventQueue$4.run(Unknown Source)

    at java.security.AccessController.doPrivileged(Native Method)

    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)

    at java.awt.EventQueue.dispatchEvent(Unknown Source)

    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

    at java.awt.EventDispatchThread.run(Unknown Source)


Wo liegt mein Fehler???

Hier noch mal der Code von der terrain Klasse:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package lsp.ae.de;


import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import javax.swing.ImageIcon;

import javax.swing.JPanel;


public class Terrain extends JPanel{


    private static final long serialVersionUID = 1L;

    
    String[][] TerrainPath = 

        {

            
            {"dirt", ""}, 

            {""}

            
        };

    
    Image[][] TerrainImage = 

        {

            
            {},{},

            {},{}

            
        };

    
    public Terrain()

    {

        setFocusable(true);

        
        ImageIcon I_0_0 = new ImageIcon((getClass().getResource("/blocks/" + TerrainPath[0][0] + ".png")));

        TerrainImage[0][0] = I_0_0.getImage();

    }

    
    public void paint (Graphics G)

    {

        super.paint(G);

        Graphics2D Drawing = (Graphics2D)G;

        
        Drawing.drawImage(TerrainImage[0][0], 0, 0, null);

    }

    
}
(\ /) | Dies ist Hase.
(^.^) | <-- Bitte kopiere Hase in deine Signatur
(*_*) | und hilf ihm, die Weltherrschaft an sich zu reißen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

27.10.2013, 13:39

Null Pointer Exception sagt aus, dass eine Variabel den Wert Null hat. Das bedeutet sie ist nicht richtig zugewiesen. Zusätzlich wird dir hier die Information gegeben, dass das Bild eine unbekannte Quelle hat. Dadurch schließe ich darauf, dass er das Bild nicht laden kann. Du baust dir den Bildnamen ja selbst zusammen. Gib diesen vielleicht mal aus oder guck dir diesen mit dem Debugger an. Wenn er richtig ist überprüf noch mal ob die Bilddatei selbst denn auch im richtigen Verzeichnis liegt und hier auch keine Schreibfehler drin sind. Der Debugger ist an sich ein gutes Stichwort. Ich gehe davon aus, du arbeitest mit Eclipse. Du kannst links am Rand durch Maus-klicken Breakpoints setzen. Also im Codefenster links wo die Zeilennummern stehen. Wenn du jetzt das ganze debugst, dann hält dein Programm an dieser Stelle an. Du kannst dann ab da weiter laufen lassen, Schritt für Schritt dein Programm weiter laufen lassen, in Funktionen rein springen und ab hier Schritt für Schritt den Code weiter laufen lassen und und und. Dadurch kannst du schnell sehen an welcher Stelle im Code dein Problem auftritt. Ohne mir das genau angeguckt zu haben, guck mal hier. Oder wahlweise kannst du natürlich auch selbst bei Google mal nach Eclipse Debugger suchen. Möglicherweise benutz du ja auch gar kein Eclipse, dann solltest du dir aber überlegen darauf umzusteigen, oder nach dem Debugger für deine IDE suchen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

LsFan

Frischling

  • »LsFan« ist der Autor dieses Themas

Beiträge: 29

Beruf: Der Böse Admin sein xD

  • Private Nachricht senden

3

27.10.2013, 13:53

ich habe mir die dateinamen xmal ausgeben lassen hab bilder verschoben wie ein weltmeisetr ... leider ohne erfolg
(\ /) | Dies ist Hase.
(^.^) | <-- Bitte kopiere Hase in deine Signatur
(*_*) | und hilf ihm, die Weltherrschaft an sich zu reißen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

27.10.2013, 14:22

Ich selbst habe damit nie gerarbeitet. Hab grad gegooglet und dort wird die Quelle direkt dem Konstruktor übergeben. Dann könntest du den führenden Slash vor dem Pfad mal weg lassen, vielleicht mag er das nicht. PNG scheint er wohl zu kennen wenn ich das richtig gesehen habe. Ansonsten kannst du den Pfad auch mal direkt angeben ohne ihn aus deinem Array zu holen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

5

27.10.2013, 14:32

Schau mal hier: http://docs.oracle.com/javase/7/docs/api…ava.lang.String)
--> returns A URL object or null if no resource with this name is found

Die Ressource muss mit im JAR/Klassenpfad liegen. Wie kompilierst Du denn Dein Projekt und wie führst Du es aus?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chromanoid« (27.10.2013, 14:37)


6

29.10.2013, 18:21

Quellcode

1
getClass().getResource("/blocks/" + TerrainPath[0][0] + ".png")


Es wird an der Stelle an der sich die Klasse befindet (Verzeichnis) im Unterverzeichnis "blocks" nach der Datei gesucht.
Mit 99%er Wahrscheinlichkeit liegen die Dateien nicht dort wo sie gesucht werden.

Debugge mal folgendes

Quellcode

1
URL imageUrl = getClass().getResource("/blocks/" + TerrainPath[0][0] + ".png")


das hier solltest du dir auch mal durchlesen:

http://docs.oracle.com/javase/tutorial/u…nents/icon.html

wenn du neu anfängst, würde ich dir auch JAVAFX 2 statt Swing empfehlen. Wird vorausichtlich mit JAVA 8 sowieso Standard.

Gruß Oli

Werbeanzeige