JavaFX Background-Bild wird in .exe nicht angezeigt

hk

Bekanntes Mitglied
Hallo Forum,
ich habe eine Maven JavaFX-Anwendung welche in der IDE (Netbean) das Background-Bild anzeigt. Wenn ich jedoch ein Build mit Image mache wird das Bild nicht angezeigt. Muss ich da was in der POM eintragen?
 

KonradN

Super-Moderator
Mitarbeiter
Erst einmal musst Du uns zeigen, was Du genau machst. Was für ein Projekt hast, wo liegt das Bild, wie hast Du es eingebunden?

Vermutlich greifst Du auf das Bild per File API zu, so dass Du auf das Bild innerhalb des Projekts zugreifst. Das spätere Endresultat hat aber doch keinen Zugriff mehr auf das Projekt selbst. Der übliche Weg für sowas ist die Resource API, d.h. Du legst das Bild als Resourcce ab (bei Maven/Gradle wäre es src/main/resources) und dann greifst Du da per Classloader drauf zu (also z.B. per Class.getResourceAsStream)
 

hk

Bekanntes Mitglied
Das File steht in src/main/resources/aut/Heinz/DevilsBoard.jpg.
Laden tu ich es mit:
Java:
BackgroundImage backgroundImage = new BackgroundImage(new Image("File:src\\main\\resources\\aut\\heinz\\DevilsBoard.jpg", 1280, 960, false, true),
            BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
            BackgroundSize.DEFAULT);
    pane.setBackground(new Background(backgroundImage));
 

KonradN

Super-Moderator
Mitarbeiter
Ok, dann liegt die Datei schon an der richtigen Stelle. Aber Du darfst da nicht versuchen, so zuzugreifen. Du hast ja - wie bereits gesagt - später keinen src Ordner mehr. Die Datei ist dann auch nicht mehr so auf der Festplatte sondern in einem Archiv. Und aus dem muss die Datei dann geladen werden und das geht per Classloader.

Was in src/main/resources liegt, kommt z.B. direkt in den Classpath. Auf dem Classpath ist die Datei also der Pfad ab da: /aut/heinz/DevilsBoard.jpg

Jetzt müssen wir nur noch schauen, was Image so für Konstruktoren hat:
und da gibt es gleich zwei, die passen würden:

a) InputStream - also können wir uns einfach einen Stream zu der Ressource geben lassen. Das wäre denn etwas wie:
new Image(getClass().getResourceAsStream("/aut/heinz/DevilsBoard.jpg"))
b) URL als String. Eine URL bekommen wir von getResource und da es als String gegeben werden soll, brauchen wir noch toString():
new Image(getClass().getResource("/aut/heinz/DevilsBoard.jpg").toString())

Das sollte funktionieren (So Du in einer Instanzmethode bist. Sollte es eine (statische) Klassenmethode sein, dann kannst Du statt getClass() einfach YourClassName.class einsetzen.) wobei Code nur rein im Forum geschrieben wurde - ggf. kann sich ein Tippfehler eingeschlichen haben.
 

hk

Bekanntes Mitglied
Jetzt müssen wir nur noch schauen, was Image so für Konstruktoren hat:
und da gibt es gleich zwei, die passen würden:

a) InputStream - also können wir uns einfach einen Stream zu der Ressource geben lassen. Das wäre denn etwas wie:
new Image(getClass().getResourceAsStream("/aut/heinz/DevilsBoard.jpg"))
b) URL als String. Eine URL bekommen wir von getResource und da es als String gegeben werden soll, brauchen wir noch toString():
new Image(getClass().getResource("/aut/heinz/DevilsBoard.jpg").toString())

Das sollte funktionieren (So Du in einer Instanzmethode bist. Sollte es eine (statische) Klassenmethode sein, dann kannst Du statt getClass() einfach YourClassName.class einsetzen.) wobei Code nur rein im Forum geschrieben wurde - ggf. kann sich ein Tippfehler eingeschlichen haben.
Ich bekomme mit beiden Varianten beim Start der .exe die Meldung "Failed to launch JVM".
Bei run in der IDE bekomme ich einen Nullpointer-Error.
Java:
public class JavaFXApp extends Application {
Pane pane = new Pane();     //NEU

    @Override
    public void start(Stage primaryStage) {
    pane.setPrefSize(1280, 960);
    // JPG-Bild laden und Hintergrundbild einstellen
    Image image = new Image(getClass().getResource("/aut/heinz/DevilsBoard.jpg").toString());
    //Image image = new Image(getClass().getResourceAsStream("/aut/heinz/DevilsBoard.jpg"));
    BackgroundImage backgroundImage = new BackgroundImage(image,
            BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
            BackgroundSize.DEFAULT);
    pane.setBackground(new Background(backgroundImage));
    pane.setOnMouseClicked(this::handleMouseClick);
            primaryStage.setTitle("Hello World!");
      Scene scene = new Scene(pane);    //NEU
      primaryStage.setScene(scene);     //NEU
            primaryStage.show();
      // Spielfeld erstellen
      GameBoard gb = new GameBoard(pane);     
    } // end start
 

KonradN

Super-Moderator
Mitarbeiter
Dann prüfe bitte:
  • ist die Datei korrekt in dem erzeugten jar? (Das jar ist auch nur ein ZIP File - also ggf. Endung ändern und mit der Software Deiner Wahl hinein schauen)
  • ist alles korrekt geschrieben? Windows achtet im Dateisystem in der Regel nicht auf die Gross-/Kleinschreibung aber das musst Du prüfen. Wenn also der Pfad nicht komplett in Kleinbuchstaben ist und die Datei nicht exakt DevilsBoard.jpg heisst (also kein .JPG oder devilsboard.jpg oder so), dann kann es nicht geladen werden. Das kannst Du im JAR prüfen
  • Ggf. solltest Du beschreiben, wie Du die EXE baust, von der Du sprichst. Evtl. gibt es da Dinge zu beachten bezüglich Laden von Ressourcen. GraalVM hat durch das übersetzen nicht mehr diese volle Funktion des ClassLoaders, was zu Problemen führen kann und weitere Konfigurationen benötigen könnte.
Edit: Super, dass es nun funktioniert. Die Antwort von mir hatte sich mit Deiner Antwort überschnitten, aber ich lasse es mal stehen, da es auch anderen helfen könnte, die über den Thread stolpern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JFrame mit background bild -> verschiebt Buttons ? AWT, Swing, JavaFX & SWT 23
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
L JavaFX TableView background transparent machen AWT, Swing, JavaFX & SWT 7
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
ToBJo JavaFX "Blueprint" CSS Background AWT, Swing, JavaFX & SWT 4
vodkaz JButtonz Icon&Background AWT, Swing, JavaFX & SWT 3
F background bei JButton AWT, Swing, JavaFX & SWT 11
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
J JTextPane Background setzen AWT, Swing, JavaFX & SWT 6
Guybrush Threepwood JButton Background beim Klicken AWT, Swing, JavaFX & SWT 4
Luk10 Überschneidung von Image und Background AWT, Swing, JavaFX & SWT 7
G Model,Listener und background jobs AWT, Swing, JavaFX & SWT 4
J JMenu unterschiedliche Background einstellen AWT, Swing, JavaFX & SWT 5
S TableCellRenderer: JLabel-Background in JPanel AWT, Swing, JavaFX & SWT 7
O JTable label background und selection AWT, Swing, JavaFX & SWT 3
T Pseudo-Transparenz für Applets -> Background grabben AWT, Swing, JavaFX & SWT 15
P [SWT] Background-Image skalieren statt kacheln AWT, Swing, JavaFX & SWT 2
M JComboBox Selected-Background Farbe AWT, Swing, JavaFX & SWT 5
S noobfrage: background color wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
G background von JFrame funktioniert nicht AWT, Swing, JavaFX & SWT 9
T Background Color JSpiner AWT, Swing, JavaFX & SWT 2
G TableCellRenderer Background variiert darstellen AWT, Swing, JavaFX & SWT 3
C Textfield Background auf Standard zurücksetzen AWT, Swing, JavaFX & SWT 2
S JTextArea background Transparent geht nicht AWT, Swing, JavaFX & SWT 23
A Background Image auf SWT Oberfläche legen AWT, Swing, JavaFX & SWT 3
A Probleme mit Windows Style (Background) AWT, Swing, JavaFX & SWT 4
G anfängerfrage:background und buttonimages AWT, Swing, JavaFX & SWT 3
R JButton background verdeckt gemaltes AWT, Swing, JavaFX & SWT 6
Z JPanels spiegeln und JLabel Background-color AWT, Swing, JavaFX & SWT 4
M JTable background AWT, Swing, JavaFX & SWT 2
saxman23 JLabel mit Background und Foreground setzen AWT, Swing, JavaFX & SWT 3
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
B Bild lädt nicht AWT, Swing, JavaFX & SWT 2
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
M Bewegtes Bild im BorderLayout.CENTER AWT, Swing, JavaFX & SWT 6
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
N Bild Drehen AWT, Swing, JavaFX & SWT 1
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L Bild nicht in der Mitte AWT, Swing, JavaFX & SWT 16
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
T JavaFX Bild in Tabellenzelle AWT, Swing, JavaFX & SWT 2
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Swing Bild Skallieren AWT, Swing, JavaFX & SWT 1
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
Z Bildervorschau, MouseDragged das Bild verschieben AWT, Swing, JavaFX & SWT 1
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
G paintComponents zerstückelt Bild AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen


Oben