# getResource() bei Image-Objekt



## Donut (8. Jul 2004)

Wenn ich Bilder aus .jar-Files auslesen will, muss man ja getResource("bild.jpg") benutzen.

Alle Lösungsvorschläge zu diesem Problem hier im Forum speichern dieses Bild dann in einem Swing-ImageIcon.

Wenn ich das aber auf ein AWT-Image objekt übertrage, funktioniert das nicht.....:

```
Image bild = toolkit.getImage(getClass().getResource("ordner/bild.jpg"));
```

es gibt eine NullPionterException, wenn ich mit dem Bild operiere, also ist die zuordnung nicht in Ordnung...

Gibt es eine möglichkeit das auf Image zu übertragen, oder muss man da ImageIcon nehmen?


----------



## Donut (8. Jul 2004)

ich hab jetzt folgendes gefunden, was aber irgendwie nicht funktioniert:

(geformt aus: http://gd.tuwien.ac.at/languages/java/GoToJava2/html/k100083.html -> ImageResource.inc)

```
public Image getJarBild(String url)
	throws IOException
	{
		Image ret = null;
		InputStream is = this.getClass().getClassLoader().getResourceAsStream(url);
		
		if (is != null)
			{
			byte[] buffer = new byte[0];
			byte[] tmpbuf = new byte[1024];
			while (true)
			{
				int len = is.read(tmpbuf);
				if (len <= 0) {
				break;
			}
			byte[] newbuf = new byte[buffer.length + len];
			System.arraycopy(buffer, 0, newbuf, 0, buffer.length);
			System.arraycopy(tmpbuf, 0, newbuf, buffer.length, len);
			buffer = newbuf;
			}
			//create image
			ret = Toolkit.getDefaultToolkit().createImage(buffer);
			is.close();
		}
		return ret;
	}
```

wenn ich das so einbinde, gibts wieder ne NullPointer:

```
try
	{
		hintergrund = this.getJarBild("gfx/hintergrund.jpg");
	}
	catch(IOException ex)
	{
		return;
	}
```


----------



## akira (8. Jul 2004)

Hallo,

liegt der Ordner gfx auf der root-Ebene Deines jars?

Dann probiere mal:


```
getJarBild("/gfx/hintergrund.jpg");
```

Ansonsten wird der Pfad relativ zum package der aktuellen Klasse interpretiert.


----------



## Xenophon (8. Jul 2004)

Donut hat gesagt.:
			
		

> Alle Lösungsvorschläge zu diesem Problem hier im Forum speichern dieses Bild dann in einem Swing-ImageIcon.
> Wenn ich das aber auf ein AWT-Image objekt übertrage, funktioniert das nicht.....:



Du könntest auch einfach bei dem ImageIcon getImage() aufrufen. Dann hast Du Dein Image.


----------



## Donut (8. Jul 2004)

@ akira:
geht auch nicht....
Es existiert nur eine Klasse, die zusemmen mit dem Ordner gfx auf einer Ebene ist....

@ Xenophon:
edit:
jetzt hab ichs verstanden ....
wenn ich das so mache:

```
ImageIcon bla = new ImageIcon(getClass().getResource("ordner/bild.jpg"));
private Image bild = bla.getImage();
```

dann gibts ne nullPointer und zwar dann, wenn die JVM versuch in der klasse ImageIcon die Url umzuwandeln:

```
this(location, location.toExternalForm());
```

heißt das jetzt, dass bla = null is?


----------



## Xenophon (8. Jul 2004)

Schreib mal den Stacktrace hier rein. Ich denke, dass location null ist.


----------



## Xenophon (8. Jul 2004)

Donut hat gesagt.:
			
		

> Es existiert nur eine Klasse, die zusemmen mit dem Ordner gfx auf einer Ebene ist....



Was mir gerade einfällt: Der Ordner befindet sich doch hoffentlich bei Deiner class-Datei und nicht bei Deiner java-Datei.


----------



## Donut (8. Jul 2004)

stacktrace?  :bahnhof: 



> java.lang.NullPointerException
> at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
> at Bot.<init>(Bot.java:96)
> at Bot.main(Bot.java:121)
> Exception in thread "main"



javax.swing.ImageIcon.<init>:

```
public ImageIcon (URL location) {
       this(location, location.toExternalForm());
    }
```

Bot.<init>:

```
[color=red]ImageIcon bla = new ImageIcon(getClass().getResource("gfx/hintergrund.jpg"));[/color]
```

Bot.main

```
final Bot Builder = new Bot();
```


edit:
jo klar
bsp:
Class: c:\java\meine.classs
Bilder: c:\java\gfx\bild.jpg

edit 2: 
chat?


----------



## Xenophon (8. Jul 2004)

Lass Dir mal die URL ausgeben.


```
URL url = getClass().getResource("gfx/hintergrund.jpg");
System.out.println(url);
```


----------



## Donut (10. Jul 2004)

*schäm* 
ging doch ... der Dateiname war falsch ... thx  :lol:


----------

