Hallo, ich versuche gerade, Musik zu meiner Anwendung hinzuzufügen und jetzt habe ich das Programm die Dateinamen aus einer Datei zu bekommen und spielen sie. Aufgrund eines Fehlers in der Anwendung, die ich versucht habe zu vermitteln, indem ich den Thread in den Ruhezustand versetzt habe, spielt der Musik-Player beide Stücke zur gleichen Zeit, was zwar gut klingt, aber mir nicht hilft. Unten ist mein Code:Musik-Player liest aus Textdatei spielt alle Stücke auf einmal Javafx
public static class MusicPlayerService extends Service<Void>
{
public static File[] musicArray = new File[2];
public static int fileNumber = 0;
@Override
protected Task<Void> createTask(){
Scanner musicListReader;
try {
musicListReader = new Scanner(new File("Music_PlayList.txt"));
while(musicListReader.hasNext())
{
musicArray[fileNumber] = new File(musicListReader.next());
String uriString = musicArray[fileNumber].toURI().toString();
Media media = new Media(uriString);
MediaPlayer player = new MediaPlayer(media);
player.play();
Thread.sleep((long) media.getDuration().toMillis());
fileNumber++;
}
} catch (FileNotFoundException | InterruptedException e1) {
e1.printStackTrace();
}
return null;
}
}
was 'media.getDuration() toMillis()' Rückkehr? –
Und da ist mein Problem. Anscheinend gibt es NaN statt einer Zahl zurück. Was würde das sein? Null? Und wenn ja, gibt es einen anderen Weg, den Wert zu bekommen? –
Es ist nicht null, es ist 'NaN'. Siehe [Dokumente] (http://docs.oracle.com/javase/8/javafx/api/javafx/util/Duration.html#toMillis--). Sie versuchen, auf die Dauer zuzugreifen, bevor das Medium sie gelesen hat (sie ist offensichtlich in die Metadaten der Audiodatei eingebettet). Die schlafende Schleife ist wahrscheinlich nicht wirklich ein guter Ansatz: Warum registrieren Sie nicht einen 'onStopped'-Handler mit dem Player und spielen den nächsten Track, wenn es einen anderen gibt. –