2014-04-21 17 views
7

Ich habe gerade angefangen mit JavaFX zu arbeiten. Ich weiß, wie die Grundlagen funktionieren. Ich habe versucht, die Medien und die Mediaplayer-Klassen zu verwenden, um einen Sound namens "sound.mp3" zu spielen. Ich programmiere in Eclipse, und ich habe die Sound-Datei im Ordner Src, der gleiche Ordner wie "(Standard-Paket)". Hier ist mein Code:So spielen Sie Sounds mit JavaFX

import javafx.scene.media.*; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class Main extends Application{ 

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

@Override 
public void start(Stage primaryStage){ 
    primaryStage.setTitle("Hello World!"); 

    String ssound = "sound.mp3"; 
    Media sound = new Media(ssound); 
    MediaPlayer mediaPlayer = new MediaPlayer(sound); 
    mediaPlayer.play(); 

    StackPane root = new StackPane(); 
    primaryStage.setScene(new Scene(root, 800, 450)); 
    primaryStage.show(); 
} 
} 

Bitte sagen Sie mir, was ich falsch mache. Hier

ist die Fehlermeldung, was von der Konsole:

Exception in Application start method 
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:724) Caused by: java.lang.IllegalArgumentException: uri.getScheme() == null! 
    at com.sun.media.jfxmedia.locator.Locator.<init>(Unknown Source) 
    at javafx.scene.media.Media.<init>(Unknown Source) 
    at Main.start(Main.java:16) 
    at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$5.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source) ... 1 more 
+1

Basierend auf 'uri.getScheme() == null', nehme ich an, dass Sie einen URI für die Sounddatei angeben müssen, anstatt nur einen Dateinamen. –

+1

"Die Quelle muss einen gültigen URI darstellen und ist unveränderlich. Es werden nur HTTP-, FILE- und JAR-URLs unterstützt." http://docs.oracle.com/javafx/2/api/javafx/scene/media/Media.html#Media(java.lang.String) –

Antwort

2

Dies ist, was ich bin derzeit mit:

Media hit = new Media(new File(soundFilename).toURI().toString()); 
+0

Dies ist keine vollständige Antwort. Dies gibt keinen Ton wieder. –

9

Nur eine Arbeitszusammenstellung dessen, was die anderen Antworten sagen:

String musicFile = "StayTheNight.mp3";  // For example 

Media sound = new Media(new File(musicFile).toURI().toString()); 
MediaPlayer mediaPlayer = new MediaPlayer(sound); 
mediaPlayer.play(); 

Fügen Sie die Musikdatei in Ihrem Projektordner, neben bin und src.

Jeder möglicher IDE Sie auffordern, diese auch hinzufügen: wie ein Zauber

import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import java.io.File; 

Works.

+0

Danke! Ich habe versucht, JOAL für das Abspielen von Sound zu verwenden, aber es hat am Ende jeder Wav-Datei einen unangenehmen Knall-Sound gespielt und erwies sich auch als übermäßig kompliziert, nur um Sounds zu spielen. Dies löst mein Problem. – AvaLanCS

3
mApplause = new AudioClip(this.getClass().getResource("/sounds/applause.mp3").toExternalForm()); 

So ist es das, was ich gebraucht und es hat funktioniert, ich weiß es wohl mehr spielt keine Rolle, aber da es in meinem Google-Suche bekam, während ich, dass ich für etwas anderes suchen war, dachte ich, um sie beantworten würde. :)

Bedeutung der ToExternal Form erzählt es, um eine URL-Form der Pfaddatei zu bilden.

+1

Sie sollten die AudioClip-Klasse nur zum Abspielen kurzer Audiodateien verwenden. Es speichert die unkomprimierten Rohdaten für den gesamten Sound, die für lange Audioclips ziemlich groß sein können. Für weitere Informationen: https://docs.oracle.com/javafx/2/api/javafx/scene/media/AudioClip.html – ryuujin

Verwandte Themen