# ImageIO.read -> Can`t read input file



## TDO88 (23. Mrz 2018)

Hallo Zusammen,

ich versuche über folgenden Code ein Bild einzulesen:

```
BufferedImage image = ImageIO.read(new File("resources/Kolli.png"));
```

und bekomme immer den Fehler: Can`t read input file
Ich benutze Netbeans 8.2 und habe die Struktur, wie im Bild zu sehen ist.
Komischerweise funktioniert an anderer Stelle des Programms folgender Code ohne Probleme:

```
dynamicReportsComponent =
          cmp.horizontalList(
              cmp.image("resources/MW.png").setFixedDimension(60, 60),
```

Die Bilder liegen beide im gleichen Ordner.

Hat jemand eine Idee, warum das erste Bild nicht gefunden wird?

Gruß
TDO


----------



## VfL_Freak (23. Mrz 2018)

Moin,


TDO88 hat gesagt.:


> new File


wird nicht relativen Pfaden klar kommen!
Gib' mal den absoluten Pfad ein!

VG Klaus


----------



## Thallius (23. Mrz 2018)

Wenn das Bild im Bundle liegt solltest du es mit getResource laden...


----------



## TDO88 (23. Mrz 2018)

VfL_Freak hat gesagt.:


> Moin,
> 
> wird nicht relativen Pfaden klar kommen!
> Gib' mal den absoluten Pfad ein!
> ...



Jain... Die Ordnerstruktur bei mir sieht so aus:
...\NetBeansProjects\Projectname -> Ist das Hauptverzeichnis des Projects
...\NetBeansProjects\Projectname\src\resources -> Da sind die Bilder versteckt
...\NetBeansProjects\Projectname\src\components -> Da sind alle .java Files drin

Wenn ich jetzt 
	
	
	
	





```
new File("src/resources/Kolli.png")
```
 eingebe findet er es und es läuft.
Allerdings sieht die Ordnerstruktur auf dem Zielrechner etwas anders aus und ich würde es gerne aus Kompatibilitätsgründen alles so lassen. Den Pfad ...src/resources/... gibt es auf dem Zielsystem nicht.

Gruß
TDO


----------



## TDO88 (23. Mrz 2018)

Thallius hat gesagt.:


> Wenn das Bild im Bundle liegt solltest du es mit getResource laden...


Habe es schon mit

```
image = ImageIO.read(new File(this.getClass().getResource("resources/Kolli.png").toURI()));
```

oder

```
image = ImageIO.read(this.getClass().getResource("resources/Kolli.png").toURI());
```

Probiert, bekomme aber immer eine NullPointerException.


----------



## mrBrown (23. Mrz 2018)

Du kannst einfach `ImageIO.read(this.getClass().getResourceAsStream("resources/Kolli.png"));`nutzen.

Pfad musst du gegebenenfalls anpassen, das ist in dem Fall zT Netbeans-spezifisch...


----------



## TDO88 (23. Mrz 2018)

mrBrown hat gesagt.:


> Du kannst einfach `ImageIO.read(this.getClass().getResourceAsStream("resources/Kolli.png"));`nutzen.
> 
> Pfad musst du gegebenenfalls anpassen, das ist in dem Fall zT Netbeans-spezifisch...



Gibt mir leider auch eine NullPointerException zurück.
Mir bleibt wohl nichts anderes übrig, als den Pfad mit src/ anzugeben und den Ordner im Zielsystem neu anzulegen.
Mich wundert es nur so, dass es in einem Fall einfach so funktioniert und im anderen Fall nicht, obwohl beide Bilder im gleichen Verzeichnis liegen


----------



## mrBrown (23. Mrz 2018)

pack das ganze mal als Jar und entzippe die dann - daran siehst du die passenden Pfade.

den Pfad mit src/ angeben ist in jedem Fall völliger Unsinn.



TDO88 hat gesagt.:


> Mich wundert es nur so, dass es in einem Fall einfach so funktioniert und im anderen Fall nicht, obwohl beide Bilder im gleichen Verzeichnis liegen


Ohne zu sehen, wie es in dem funktionierenden Fall klappt, bringt einem wenig zu wissen, dass es klappt...


----------



## TDO88 (23. Mrz 2018)

mrBrown hat gesagt.:


> Ohne zu sehen, wie es in dem funktionierenden Fall klappt, bringt einem wenig zu wissen, dass es klappt...



Ist in meinem ersten Post zu sehen. Da wird ein Bild für einen dynamicReport geladen und es funktioniert.



mrBrown hat gesagt.:


> pack das ganze mal als Jar und entzippe die dann - daran siehst du die passenden Pfade.



Habe ich gemacht. Im Ordner des .jar Files ist unter anderem ein Ordner resources und in diesem befindet sich mein Bild Kolli.png


----------



## mrBrown (23. Mrz 2018)

TDO88 hat gesagt.:


> Ist in meinem ersten Post zu sehen. Da wird ein Bild für einen dynamicReport geladen und es funktioniert.


Nein, da wird irgendeine Funktion aufgerufen, deren Funktionsweise nicht ersichtlich ist.




TDO88 hat gesagt.:


> Habe ich gemacht. Im Ordner des .jar Files ist unter anderem ein Ordner resources und in diesem befindet sich mein Bild Kolli.png


Dann sollte zumindest `ImageIO.read(this.getClass().getResourceAsStream("/resources/Kolli.png"));` funktionieren, wenn die Jar ausgeführt wird.

Liegen die Klassen auch im Package components?


----------



## TDO88 (23. Mrz 2018)

mrBrown hat gesagt.:


> Nein, da wird irgendeine Funktion aufgerufen, deren Funktionsweise nicht ersichtlich ist.



Das ist Teil eines JasperReports, in den auch ein Bild geladen wird und im PDF eingefügt wird



mrBrown hat gesagt.:


> Dann sollte zumindest `ImageIO.read(this.getClass().getResourceAsStream("/resources/Kolli.png"));` funktionieren, wenn die Jar ausgeführt wird.



Hier hast du indirekt die Lösung des Problems geliefert. Wenn ich ein / vor resources setze funktioniert es einwandfrei.
Das war also des Rätsels Lösung.
Vielen Dank dafür.

Gruß
TDO


----------



## mrBrown (23. Mrz 2018)

TDO88 hat gesagt.:


> Hier hast du indirekt die Lösung des Problems geliefert. Wenn ich ein / vor resources setze funktioniert es einwandfrei.


Ob ein '/' davor muss oder ob man besser getClass().getClassloader nutzt hängt vom Package ab, in dem die Klasse liegt, das steht hier leider nirgends


----------

