JavaFX MP3 abspielen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ja hallo (wieder) - Schade, dass es leider mittlerweile keine neuen Details gab hinsichtlich deiner letzten Frage, was sich mit dem selben Thema befasst.

Sofern du nun Eclipse mit JDK 8 zum laufen gebracht hast, sollte dein ursprünglicher Code nämlich funktionieren. - Ich ändere allerdings den Pfad ab, da du von einer externen Datei ausgehst, zudem wäre für die anderen interessierten Antwort-Geber noch die Information relevant, dass du mit JavaFX arbeitest.

 public void start(Stage primaryStage) {
Media media = new Media("C:\\temp\\MeinSong.mp3");
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.play();
primaryStage.setTitle("");//();setTitle("Audio Player 1");
primaryStage.setWidth(200);
primaryStage.setHeight(200);
primaryStage.show();
}


Sofern du JavaFX ausschließen möchtest, da es für dich nicht mehr relevant ist, gib bitte bescheid. Denn in so einem Falle wird das abspielen von MP3 Songs nämlich nicht mehr so trivial.


Sorry, aber nochmal zu deiner vorherigen Frage, ergänzend, da ich schlichtweg vermute, dass bei dir noch nicht auf das JDK 8 referenziert wird und du deshalb deinen Code nicht ausführen kannst. Hier ein Tutorial, dass dich hierbei unterstützt:

https://youtube.com/watch?v=S5xeXawYgK0


yeretor 
Fragesteller
 25.04.2016, 16:23

Vorher hats halt meinen ganzen code für falsch befunden. Jetzt nichtmehr, ich bekomm bie diesem code:

package helloworld;

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

public class HelloWorld extends Application {
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
Stage ps = new Stage();
hw.start(ps);

}

public void start(Stage primaryStage) {
Media media = new Media("D:\\Bsp.mp3");
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.play();
primaryStage.setTitle("Title");//();setTitle("Audio Player 1");
primaryStage.setWidth(200);
primaryStage.setHeight(200);
primaryStage.show();
}
}

Diese vehlermeldung:

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:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
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:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.IllegalStateException: Not on FX application thread; currentThread = main
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:236)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
at javafx.stage.Stage.(Stage.java:241)
at javafx.stage.Stage.(Stage.java:227)
at helloworld.HelloWorld.main(HelloWorld.java:12)
... 11 more
Exception running application helloworld.HelloWorld
0
KnusperPudding  25.04.2016, 16:54
@yeretor

Suuper, dass es soweit geklappt hat.

Zu JavaFX ist anzumerken, dass du hier deine Methode nicht so starten solltest:

 HelloWorld hw = new HelloWorld();
Stage ps = new Stage();
hw.start(ps);

Rufe in deiner Main-Methode ganz einfach: launch auf.

public static void main (String[] args) {
    launch(args);
}

In deiner start() Methode muss der Player im FX-Application-Thread laufen. 

D.h. dann die entsprechende Stelle via Plattform.runlater() ausführen:

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        Media media = new Media("file:///C:/temp/1.mp3");
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaPlayer.play();
    }
});
1
yeretor 
Fragesteller
 26.04.2016, 15:00
@yeretor

... oder auch nicht. Es stoppt mein knapp 15 min. langes beispiel stück nach 15 sek. woran liegt das?

1
KnusperPudding  26.04.2016, 15:03
@yeretor

Das ist eher ungewöhnlich, dass es 'einfach so stoppt'. 

Schließt du den eventuell Die Scene? 

Gibt es eine Exception? 

Friert der Bildschirm ein? 

1
yeretor 
Fragesteller
 26.04.2016, 15:08
@KnusperPudding

nein, nichts von alledem.

erst erscheint ein kleines, weißes fenster, wo oben Titel steht, das stück started, hört 15 sec später wieder auf, fenster bleibt.

0
KnusperPudding  26.04.2016, 15:28
@yeretor

Vermutlich ist es das.

- Freut mich dass es für dich klapp. Viel Spass und Erfolg damit.

0
KnusperPudding  26.04.2016, 15:34
@KnusperPudding

Offensichtlich ist die Ursache die Garbagecollection. Ich würde das sogar als Bug deklarieren. 

Nachdem der Player nur innerhalb einer Methode die Gültigkeit hat, wird diese dann automatisch weggeräumt, wenn Speicherbedarf besteht.

Die Deklaration der Variable als Statische/Instanz-Variable dürfte bereits für dich zur Lösung führen, ja.

1

Du kannst mit Hilfe des FileChoosers von JavaFX dir eine entsprechende .mp3 Datei in ein File Object abspeichern. Und dann einfach mit Hilfe der Media und der MediaPlayer Klasse diese abspielen. 

Media constructor und den dann abspielen. Vorher noch in einen try Catch Block mit dem File constructor den Pfad festlegen