2014-04-21 55 views
7

Sadece JavaFX ile çalışmaya başladım. Temellerinin nasıl çalıştığını biliyorum. Medyayı ve mediaplayer sınıflarını "sound.mp3" adlı bir ses çalmak için kullanmaya çalıştım. Tutulumda programlama yapıyorum ve ses dosyasını src klasöründe, "(varsayılan paket)" ile aynı klasörde var. Benim kodum:JavaFX ile ses çalma

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(); 
} 
} 

Lütfen bana ne yapıyorum yanlış söyle.

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' temel alınarak, yalnızca bir dosya adı yerine ses dosyası için bir URI sağlamanız gerektiğini varsayalım. –

+1

"Kaynak geçerli bir URI'yi temsil etmeli ve değişmez. Sadece HTTP, FILE ve JAR URL'leri desteklenmelidir." http://docs.oracle.com/javafx/2/api/javafx/scene/media/Media.html#Media(java.lang.String) –

cevap

2

Bu anda kullanarak budur: İşte

konsoldan hata mesajı şeydir

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

bu tam bir cevap değil. Bu bir ses çalmıyor. –

9

diğer cevaplar söylediklerine Sadece bir çalışma derleme:

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

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

Müzik dosyasını Project klasörünüze ek olarak bin ve 0'a ekleyin..

Herhangi IDE de bu eklemek isteyecektir: Büyü gibi

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

Çalışır.

+0

Teşekkürler! Ses çalmak için JOAL kullanmayı denedim, ancak her wav dosyasının sonunda kötü bir ses çıkardı ve aynı zamanda sadece ses çalmak için aşırı karmaşık olduğunu kanıtladı. Bu benim problemimi çözüyor. – AvaLanCS

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

Yani bu kullandığım ve ben başka bir şey arıyordu iken benim google arama geldiğinden beri muhtemelen olsun artık ama ben buna cevap verecek düşünce etmediğini biliyorum çalıştı budur.

toExternal Formu anlamı, yol dosyasının bir url formunu oluşturmayı anlatır.

+1

AudioClip sınıfını sadece kısa ses dosyalarını oynatmak için kullanmalısınız. Uzun ses klipleri için oldukça büyük olabilen, sesin tamamı için ham, sıkıştırılmamış ses verilerini saklar. Daha fazla bilgi için: https://docs.oracle.com/javafx/2/api/javafx/scene/media/AudioClip.html – ryuujin

İlgili konular