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

标签 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() 中调用声音函数,但由于我的声音函数的第二个类似错误,我的程序无法执行。媒体对象在构造函数中接受一个参数,该参数是音频文件的路径。当我得到时,它以某种方式失败了:

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)

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

这怎么行不通?为什么我会收到这些错误。

最佳答案

这里的问题是 MediaPlayer 只能在 JavaFX 应用程序中使用,因此您需要将应用程序转换为 JavaFX应用程序,如果你想能够使用它。

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

  1. 使您的类 SoundTest 扩展 javafx.application.Application
  2. 然后将您的main 方法修改为下一个

    public static void main(String[] args) { 应用程序启动(args); }

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

关于Java 音频未加载。 toURI 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37553433/

相关文章:

java - 我怎样才能让 Eclipse(或 javac)警告过度包容的 throws 条款

java - spring mvc登录后重定向到主页

java - 如何在两个jframes之间传递值

java - 用 Java 创建图例

java - 无法找到 Spring NamespaceHandler util

java - JOOQ 从 selectCount 检索 map

java - 加密 application.yml 中的 RSA 公钥

java - 在 ExecutorService 中 hibernate 一个线程 (Java/Clojure)

java - 我应该只使用 Lucene 来突出显示吗?

java - 将对象传递给 DROOLS