Java音频未加载。 toURI不工作?

时间:2016-05-31 18:48:52

标签: java

import java.io.File;

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

public class SoundTest extends Application{
public static void main(String[] args) {
    launch(args);
}

    public static void sound() {
        String path = "test.mp3";
        Media media = new Media(new File(path).toURI().toString());
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaPlayer.play();
    }

    @Override
    public void start(Stage arg0) throws Exception {
        sound();
    }
}

我有一些问题。我用谷歌搜索并偶然发现了一些有用的stackoverflow帖子,这些帖子提供了如何通过媒体和媒体播放器加载声音的解释。

我正在做的是,我在main()中调用声音函数,但由于我的声音函数的第二次失败,我的程序无法执行。 media对象接受构造函数中的参数,该参数是音频文件的路径。不知怎的,它在那里失败了:

Exception in thread "Thread-0" java.lang.IllegalStateException: Toolkit not initialized
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at javafx.application.Platform.runLater(Unknown Source)
    at javafx.scene.media.Media$_MetadataListener.onMetadata(Unknown Source)
    at com.sun.media.jfxmediaimpl.MetadataParserImpl.done(Unknown Source)
    at com.sun.media.jfxmediaimpl.platform.java.ID3MetadataParser.parse(Unknown Source)
    at com.sun.media.jfxmediaimpl.MetadataParserImpl.run(Unknown Source)
Exception in thread "main" java.lang.IllegalStateException: Toolkit not initialized
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at javafx.application.Platform.runLater(Unknown Source)
    at javafx.scene.media.MediaPlayer.init(Unknown Source)
    at javafx.scene.media.MediaPlayer.<init>(Unknown Source)
    at core.SoundTest.sound(SoundTest.java:43)
    at core.SoundTest.main(SoundTest.java:13)

我的声音文件位于我所在的eclipse项目的文件夹中。这是一个3分钟长的mp3文件,位于src和bin文件夹内,但不在包内。 (我在窗户上)。

为什么这不起作用?为什么我会收到这些错误。

1 个答案:

答案 0 :(得分:4)

此处的问题是,MediaPlayer仅用于JavaFX应用程序,因此如果您希望能够使用,则需要将应用程序转换为JavaFX应用程序它

要将您的课程转换为您需要的JavaFX应用程序:

  1. 使您的课程SoundTest延伸javafx.application.Application
  2. 并将您的main方法修改为下一个

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

  3. 然后,您可以在sound
  4. 的实施中调用方法start