# Images laden in static Methode



## Javaanfänger12 (10. Dez 2012)

Hallo, 
Ich bin dabei ein Snakespiel zu programmieren.
Jetzt möchte ich dem ganzen etwas Farbe verleien.
Daher möchte ich auf JLabels .png Bilder anzeigen lassen.
Das funktioniert auch eigentlich mit 

```
ImageIcon icon = new ImageIcon(getClass().getResource("bild.png"));
JLabel label = new JLabel();
label.setIcon(icon);
```

Jedoch nur in einer "nicht-static" Methode.
die Methode in der ich das Bild laden will ist aber static, da ich sie mit 

```
methodenname();
```
aus einer anderen heraus aufrufe und Eclipse da eben ein static verlangt.

In der static methode ist das getClass() (s.o.) jedoch von Eclipse als fehler markiert.

Nun suche ich eine Lösung, mit der man entweder das static vor der Methode weglassen kann oder eine in static Methoden funktionierende Alternative zum Laden von Bildern in Variablen, um sie dann zu verwenden.

Danke für eure Hilfe.


----------



## TKausL (10. Dez 2012)

Javaanfänger12 hat gesagt.:


> da ich sie mit
> 
> ```
> methodenname();
> ...



Falscher Ansatz. Man macht keine Methoden statisch nur weil Eclipse das so verlangt.

Zeig mal Codeausschnitte von der Methode und von wo sie aufgerufen wird.


----------



## Javaanfänger12 (10. Dez 2012)

Diese Methode ( tick() ) ruft die Methode spielfeldrepaint() auf die in der Klasse Spielfeld ist.


```
public class Tick{
    
    static int wiederholen = 1;
    static int speed = 500;
    
    public static void tick()  {
    	
        new Thread(new Runnable(){
        	
        	public void run() { 
        	
        		while (wiederholen == 1) {
        	
        			Schlangenbewegung.bewegen();   										 //Schlangenarray erneuern          
                             
        			Spielfeld.spielfeldrepaint(); 										 //Spielfeld erneuern
            
        			Steuern.scorelabel();
        					try {
        						Thread.sleep(speed);                                    //Geschwindigkeit der Schlange
        					} 
        					catch (InterruptedException e) {
        						e.printStackTrace();
        					}
        		}	
        	}
        	
        }		).start();
        
    }
}
```


In der Klasse will ich die Bilder laden ( eben anstatt der Veränderung der Labelfarbe) :


```
public static void spielfeldrepaint() {
		
		ImageIcon icon = new ImageIcon(getClass().getResource("Schlangenbild.png"));
			
		for (int i = 0; i < Schlange.wertarray.length; i++) {							//Aktualisieren der Farben auf dem Spielfeld
			
			if (Schlange.wertarray[i] == 1) {
						
				Spielfeld.labelarray[i].setIcon(icon);
//				Spielfeld.labelarray[i].setBackground(Color.black);					//Schlangenfarbe
				
			}
```

Da diese Methode eben static ist, funktioniert darn das getClass nicht.


----------



## TKausL (10. Dez 2012)

Hast du denn nirgends eine Instanz der Klasse Spielfeld erstellt?


----------



## Javaanfänger12 (10. Dez 2012)

Das ist nur ein Ausschnitt: 
Darüber steht noch public Spielfeld {hier die Methode spielfeldrepaint() }

Meinst du das damit? 
Ich programmiere noch nciht lange mit Java.


----------



## TKausL (10. Dez 2012)

Ich denke hier fehlen wichtige Grundlagen. Hast du ein Buch womit du Java lernst? Wenn nein kauf dir eines.


----------



## Titanpharao (10. Dez 2012)

```
ImageIcon icon = new ImageIcon("imagefolder/image.png");
JLabel label = new JLabel();
label.setIcon(icon);
```


----------



## Javaanfänger12 (10. Dez 2012)

Danke an Titanpharao! Das war genau das was ich gesucht habe.

@TKausL: Mir ist schon klar, dass meine Grundlagen verbesserungswürdig sind aber ich versuche einfach da wo ich etwas nicht verstehe nachzubessern. Wenn die Programme die ich schreibe laufen dann reicht mir das schon.
Klar könnte ich mich noch viel intensiver mit dem Grundlagen beschäftigen aber dazu fehlt mir einfach die Zeit.

Trotzdem SUPER Forum


----------



## TKausL (11. Dez 2012)

Javaanfänger12 hat gesagt.:


> @TKausL: Mir ist schon klar, dass meine Grundlagen verbesserungswürdig sind aber ich versuche einfach da wo ich etwas nicht verstehe nachzubessern. Wenn die Programme die ich schreibe laufen dann reicht mir das schon.
> Klar könnte ich mich noch viel intensiver mit dem Grundlagen beschäftigen aber dazu fehlt mir einfach die Zeit.



Nunja, man kann dich ja zu nichts zwingen. Aber ich bitte dich, schau dir mal den unterschied zwischen statischem und nicht-statischem Kontext an. Wenn du den nicht Kapierst werden dir noch Tausende von Fehlern passieren die zu einem unerwarteten Programmablauf führen werden.


----------

