gpt4 book ai didi

java - 文件路径中的斜杠字符在 javafx 媒体中创建异常

转载 作者:行者123 更新时间:2023-12-02 12:05:47 24 4
gpt4 key购买 nike

我在这个论坛中发现了很多关于这个主题的类似问题,但是这些问题的解决方案都不适合我,这个问题真的让我感到沮丧。

我有以下方法,当我调用它时应该播放 wav 文件。wav 文件的目录为:ProjectFolder/src/resources/Sounds/click.wav

public static void Click()
{
String clickSound = "/resources/Sounds/click.wav";
Media hit = new Media(new File(clickSound).toPath().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
}

但它会导致以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in path at index 0: \resources\Sounds\click.wav
at javafx.scene.media.Media.<init>(Media.java:385)

当我设置字符串clickSound“resources/Sounds/click.wav”的值而不是“/resources/Sounds/click.wav”时,异常显示索引处路径中存在非法字符9.

所以我猜测它正在将“/”字符视为非法字符。我尝试使用“\”而不是“/”,但结果是相同的。

出于某种原因,我不想更改 wav 文件的位置。如何访问 从 ProjectFolder/src/resources/Sounds/click.wav 访问该 wav 文件并毫无异常(exception)地播放它?

感谢任何形式的帮助。提前致谢。

最佳答案

documentation 中所述:

The source must represent a valid URI and is immutable. Only HTTP, HTTPS, FILE, and JAR URLs are supported. If the provided URL is invalid then an exception will be thrown.

您正在传递文件的路径,而不是 URI。

无论如何,您几乎肯定不想要这里的文件;例如,当您部署应用程序时,它通常会部署为 jar 文件,并且媒体将是该 jar 文件中的一个条目(因此它本身根本不是一个文件)。最重要的是,resources 文件夹通常是源代码结构的一部分,并且由于显而易见的原因,源代码通常在运行时不可用。

假设您的资源被部署到类路径的根目录(这是通常的设置),您需要类似的内容

String clickSound = "/Sounds/click.wav";

Media hit = new Media(getClass().getResource(clickSound).toExternalForm());

关于java - 文件路径中的斜杠字符在 javafx 媒体中创建异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com