# (javafx) Image Problem



## vodkaz (30. Nov 2014)

Hallo,
ich möchte ein Bild auf ein Label hinzufügen allerdings funktioniert das mir nicht :/ 


```
public void start(Stage stage) {
		Scene scene = new Scene(new Group());
		stage.setTitle("Label Sample");
		stage.setWidth(400);
		stage.setHeight(180);

		HBox hbox = new HBox();
		Image image = new Image(getClass().getResourceAsStream("toplel.jpg"));
		Label label1 = new Label("Search");
		label1.setGraphic(new ImageView(image));

		hbox.setSpacing(10);
		hbox.getChildren().add((label1));
		((Group) scene.getRoot()).getChildren().add(hbox);

		stage.setScene(scene);
		stage.show();

	}
```

Wen ich versuche diesen Code auszuführen bekomme ich diese Fehlermeldung:


```
Exception in Application start method
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:363)
	at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:303)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157)
	at com.sun.javafx.application.LauncherImpl$$Lambda$53/99550389.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: Input stream must not be null
	at javafx.scene.image.Image.validateInputStream(Image.java:1099)
	at javafx.scene.image.Image.<init>(Image.java:684)
	at application.topdoge.start(topdoge.java:24)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821)
	at com.sun.javafx.application.LauncherImpl$$Lambda$56/1152005990.run(Unknown Source)
	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323)
	at com.sun.javafx.application.PlatformImpl$$Lambda$50/1268447657.run(Unknown Source)
	at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
	at com.sun.javafx.application.PlatformImpl$$Lambda$52/1722118984.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
	at com.sun.javafx.application.PlatformImpl$$Lambda$51/1851691492.run(Unknown Source)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at com.sun.glass.ui.gtk.GtkApplication.lambda$null$45(GtkApplication.java:126)
	at com.sun.glass.ui.gtk.GtkApplication$$Lambda$42/584634336.run(Unknown Source)
	... 1 more
Exception running application application.topdoge
```

Ich hab schon gegoogelt allerdings nichts gefunden :/ Ich hoffe Ihr könnt mir weiterhelfen.
MfG Vodkaz


----------



## Ruzmanz (30. Nov 2014)

Dein InputStream ist null, d.h. er findet dein Bild nicht. Dieser müsste in dem Package der aufrufenden Klasse liegen:

application.topdoge -> toplel.jpg


----------



## dzim (30. Nov 2014)

Um sicherzugehen, verwende dort entweder absoulte Pfade, oder eindeutige Relative.

Angenommen, du hast diese Struktur hier:

```
my.package
 - MyClass
my.package.images
 - toplel.jpg
```

Absolut beginnt im default-Package des Classloaders und mit dem Pfad hangelt man sich durch den Classpath
*MyClass.class.getResourceAsStream("my/package/images/toplel.jpg")*

Relativ meint von der Klasse, die von der man eine Ressource holen möchte, hangelt man sich weiter
*MyClass.class.getResourceAsStream("./images/toplel.jpg")*
Weil das Package "images" eine Ebene tiefer ist, musst du von MyClass ausgehend weiter vorgehen.

Savvy?


----------

