当前位置: 首页 > 知识库问答 >
问题:

正在尝试使用JavaFX[duplicate]播放音频文件

洪楚
2023-03-14

我试图在我的JavaFX应用程序中播放音频文件,代码对我来说很好,但我遇到了错误

我认为问题出在第28行:

"原因:java.lang.NullPointerExctive:无法调用"java.net.URL. toString()",因为"资源"在示例中为空。Main.start(Main.java:28)"

为什么资源为空?在我的文件结构中,我得到了资源包,但不管音频文件在哪里,错误都是一样的

我是新来的编码员,所以我不知道如何准确地读取这些错误。。。如果有人能帮忙,那就太好了

下面是代码和错误

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;

import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.IOException;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws UnsupportedAudioFileException, IOException, LineUnavailableException
    {
        String css = this.getClass().getResource("styles.css").toExternalForm();
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        root.getStylesheets().add(css);
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();

        final java.net.URL resource = getClass().getResource("test2.mp3");
        final Media media = new Media(resource.toString());
        final MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaPlayer.play();
    }

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

运行此代码后,我;我有这些错误

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:465)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:901)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException: Cannot invoke "java.net.URL.toString()" because "resource" is null
    at sample.Main.start(Main.java:28)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    ... 1 more
Exception running application sample.Main

Process finished with exit code 1

谢谢任何帮助!

共有1个答案

漆雕洋
2023-03-14

由于@Slaw写下的问题与资源路径有关,下面的链接中有更多信息,

THX Slaw!

“请注意,使用JavaFX的媒体应用编程接口时,您不需要Java声音导入。还请注意,您应该保持对媒体播放器的强引用;如果它是垃圾收集的,媒体将停止播放。至于错误,如果使用指定的路径找不到资源,getResources(字符串)将返回空值。查看如何确定我的JavaFX应用程序所需的FXML文件、CSS文件、图像和其他资源的正确路径?了解相关帮助。”

 类似资料:
  • 我试图在一个网站中嵌入一个视频到一个简单的javafx应用程序的媒体视图中。我有一个示例代码,我用作我的javafx代码。它打开场景并播放音频,但不会播放视频。我怎样才能让它播放音频?我使用netbean IDE 8.0.2,JavaFx 8和场景生成器2.0我尝试过的代码如下。感谢先进。 我就是这样把孩子们抬上舞台的 下面是我从scene builder创建GUI后得到的FXML

  • 媒体播放器类很好。然而,我无法播放存储在另一个类中的mp3文件(当鼠标单击时)。有人能检查我的密码吗? 这是我尝试用来播放音频文件的类: 当我运行程序时(在下面勾选的鼠标上),我得到了以下两个错误:错误1:线程“AWT-EventQueue-0”java.lang中的异常。不支持的操作异常:尚未实现错误2:线程“thread-3”java.llang中的例外。IllegalStateExcepti

  • 尝试使用mediacontroller通过url播放音频文件 但我有一个错误: 09-11 10:28:23.970:E/MediaPlayer(912):尝试在没有有效MediaPlayer的情况下调用getDuration 09-11 10:28:23.970:E/MediaPlayer(912):错误(-38,0)09-11 10:28:23.990:E/MediaPlayer(912):尝

  • 问题内容: 我正在用HTML5和Javascript制作游戏。 如何通过Javascript播放游戏音频? 问题答案: 如果您不想弄乱HTML元素: 这使用了接口,该接口播放音频的方式与element相同。 如果需要更多功能,我使用了howler.js库,发现它简单实用。

  • 问题内容: 我正在模拟器中测试我的应用。 我正在下载文件,并以这种方式获取本地文件: 现在,我想使用AVAudioPlayer播放此文件,但是我总是遇到此错误: 播放代码: 我应该如何播放? 问题答案: 在iOS8下,您保存的路径在启动期间将无效。您看到的ID“ E5F13797-A6A8-48A1-B3C3-FBC3D7A03151”将随每次启动而更改。 解决方案是保存文件名而不是完整路径,并通

  • 问题内容: 我正在尝试获取音频文件以在iPad上的Safari中自动播放。如果我在Mac上使用Safari浏览该页面,就可以了。在iPad上,自动播放不起作用。 问题答案: 更新: 这是一个hack,并且在IOS 4.X及更高版本上不再起作用。此版本适用于IOS3.2.X。 这不是真的。Apple不想在iPad上自动播放视频和音频,因为您可以在移动网络上使用大量流量。我不会将自动播放用于在线内容。