2014-04-21 98 views
7

我剛開始使用JavaFX。我知道它的基本原理是如何工作的。我試圖使用媒體和mediaplayer類來播放聲音,名爲「sound.mp3」。我在eclipse中編程,並且在src文件夾中有聲音文件,與「(default package)」相同的文件夾。這裏是我的代碼:如何使用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(); 
} 
} 

請告訴我我做錯了什麼。

下面是從控制檯錯誤信息的事情:

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

基於'uri.getScheme()== null',我假設你需要爲聲音文件提供一個URI,而不僅僅是一個文件名。 –

+1

「源必須表示有效的URI並且是不可變的,只支持HTTP,FILE和JAR URL。」 http://docs.oracle.com/javafx/2/api/javafx/scene/media/Media.html#Media(java.lang.String) –

回答

2

這是我目前正在使用:

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

這不是一個完整的答案。這不是在播放聲音。 –

9

只是其他的答案說什麼工作編譯:

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

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

將音樂文件添加到項目文件夾中,旁邊binsrc

任何IDE會提示你添加這些還有:

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

就像一個魅力。

+0

謝謝!我嘗試使用JOAL播放聲音,但它在每個wav文件的末尾播放了令人討厭的彈出聲音,並且僅僅爲了播放聲音而被證明過於複雜。這解決了我的問題。 – AvaLanCS

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

所以這是我使用和它的工作,我知道這並不可能的事情了,但因爲它在我的谷歌搜索得到,而我一直在尋找別的東西,我想我會回答它。 :)

含義toExternal窗體它告訴形成路徑文件的URL形式。

+1

您應該僅使用AudioClip類來播放短音頻文件。它存儲整個聲音的原始未壓縮音頻數據,對於長音頻剪輯而言這可能相當大。 欲瞭解更多信息:https://docs.oracle.com/javafx/2/api/javafx/scene/media/AudioClip.html – ryuujin