JavaFX Url aus resoucen nehemen

Nilsy8214

Aktives Mitglied
also ich möchte eine .mp3 abspielen mit MediaPlayer diese mp3 ist in den resources

hier der code

Java:
import javafx.application.Application;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;

import java.net.URL;

public class sda extends Application {
   private MediaPlayer mediaPlayer ;
    public static void main(String[] args) {
        launch();

    }
    @Override
    public void init() throws Exception {
        String musicFile = "music/Music.mp3";
        playMusic(musicFile);
    }

    @Override
    public void start(Stage stage) throws Exception {

    }

    private void playMusic(String title){

        String musicFile = title;
        URL fileUrl = getClass().getResource(musicFile);


        Media media = new Media(fileUrl.toString());
        mediaPlayer = new MediaPlayer(media);
        mediaPlayer.play();
        mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
    }
}
(Also in dem Beispiel ist das Gleiche Problem )

Auf jedenfall kommt dort der Fehler code das fileUrl null ist

Code:
Caused by: java.lang.NullPointerException: Cannot invoke "java.net.URL.toString()" because "fileUrl" is null
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Das bedeutet, dass die Ressource nicht gefunden wurde. Wo liegt die Datei genau? Wie baust du das Projekt? Wie hast du es gestartet? Auf Gross-/Kleinschreibung geachtet?
 
G

Gelöschtes Mitglied 65838

Gast
Java:
        Media media = new Media(getClass().getResource(musicFile).toExternalForm());
so hatte ich es gelernt
das sucht in deinem klassen ordner nach dem unterordner music usw... bis zu der mp3 ob die datei da wirklich drin ist ist nicht bekannt
 
K

kneitzel

Gast
Java:
        Media media = new Media(getClass().getResource(musicFile).toExternalForm());
so hatte ich es gelernt
das sucht in deinem klassen ordner nach dem unterordner music usw... bis zu der mp3 ob die datei da wirklich drin ist ist nicht bekannt
Da getResource null liefert, wird auch diese Variante eine NPE werfen.

Und toString() und toExternalForm() liefern das gleiche Ergebnis:
Constructs a string representation of this URL. The string is created by calling the toExternalForm method of the stream protocol handler for this object.
Damit macht Dein Code unter dem Strich das Gleiche :)
 

Nilsy8214

Aktives Mitglied
Das bedeutet, dass die Ressource nicht gefunden wurde. Wo liegt die Datei genau? Wie baust du das Projekt? Wie hast du es gestartet? Auf Gross-/Kleinschreibung geachtet?
Also die datei ist in resources in einem order namens "music" und die rechtschreibung ist richtig ich habe mal
Java:
"music/Music.mp3"
zu
"/music/Music.mp3"
Java:
"/music/Music.mp3"
geändert

und

in playMusic()
Java:
URL fileUrl = getClass().getResource(musicFile);
zu
Java:
URL fileUrl = getClass().getResource(title);
geändert

wenn ich das jetzt so printe

Java:
System.out.println(fileUrl);
kommt das
Java:
file:/C:/Users/nilsy/Java_Projekte/test/target/classes/music/Music.mp3
das ist aber der Falsche wenn ich target lösche wird es beim runnen einfach neu gemacht

es sollte
Java:
C:\Users\nilsy\Java_Projekte\test\src\main\resources\music\Music.mp3
sein
 
G

Gelöschtes Mitglied 65838

Gast
Java:
file:/C:/Users/nilsy/Java_Projekte/test/target/classes/music/Music.mp3
file:/C:/Users/nilsy/Java_Projekte/test/target/classes/music/Music.mp3
wo ist der unterschied?
 
K

kneitzel

Gast
Also vermutlich hast Du dich vertippt, denn Du hast zwei mal den gleichen Pfad gezeigt.

Aber mal zu ein paar Dingen:
a) Die Ressourcen werden vom Classpath gelesen. Das ist bei der Ausführung au der IDE dann das target/classes Verzeichnis.
b) Unterschied "music/..." zu "/music/...": getClass().getResources() startet im Pfad des Namespaces. Wenn Du als im Namespace test bist, dann würde bei music/... nach /test/music/... geschaut. Bei /music/... bleibt es dabei.
 
K

kneitzel

Gast
Ok, habe jetzt neu geladen um deine Änderung zu sehen.

Umgang mit Ressources:
- Du legst diese im Ressouren Ordner ab. Das ist bei maven und co src/main/resources/
- Beim Bauen kommt das aber dann in den target/classes Ordner. Da sollten die Dateien also auch gefunden werden wenn Du da schaust. Der Pfad mit target/classes/ ist also richtig, denn das ist ja der Classpath Ordner wenn Du es ausführst.

Liegen denn die Dateien auch dort? Sprich: hast Du da ein music Ordner mit der MP3 Datei?
 

Nilsy8214

Aktives Mitglied
Ok, habe jetzt neu geladen um deine Änderung zu sehen.

Umgang mit Ressources:
- Du legst diese im Ressouren Ordner ab. Das ist bei maven und co src/main/resources/
- Beim Bauen kommt das aber dann in den target/classes Ordner. Da sollten die Dateien also auch gefunden werden wenn Du da schaust. Der Pfad mit target/classes/ ist also richtig, denn das ist ja der Classpath Ordner wenn Du es ausführst.

Liegen denn die Dateien auch dort? Sprich: hast Du da ein music Ordner mit der MP3 Datei?
ja die liegen dort und der Pfad ist auch richtig denoch geht es nicht
 

Nilsy8214

Aktives Mitglied
Ok habs jetzt gelöst Mein Problem war das ich am anfang das Medien Moduel einfach über Project Structure und Libaries hinzugefügt habe dadurch kamm dann dieser Fehler jetzt habe ich es in pom reimgetan mit

Java:
<dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>17.0.0.1</version>
        </dependency>

jetzt geht es
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben