在javafx媒体中创建例外的文件路径中的斜杠字符

时间:2017-10-24 16:46:22

标签: java audio javafx

我在这个论坛上发现了很多关于这个主题的类似问题,但是这些问题的解决方案都没有为我和这个问题解决,这让我很沮丧。

我有以下方法在调用它时应该播放 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 &#34; resources / Sounds / click.wav&#34;而不是&#34; /resources/Sounds/click.wav" ;,该异常表示索引9处路径中的非法字符。

所以我猜它正在考虑&#39; /&#39;角色是非法角色。我尝试过使用&#39; \&#39;而不是&#39; /&#39;,但结果是一样的。

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

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

2 个答案:

答案 0 :(得分:1)

documentation中所述:

  

源必须表示有效的URI并且是不可变的。仅支持HTTP,HTTPS,FILE和JAR URL。如果提供的URL无效,则会抛出异常。

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

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

假设您的资源正被部署到类路径的根目录,这是常见的设置,您需要类似

的内容
String clickSound = "/Sounds/click.wav";

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

答案 1 :(得分:0)

您在目录&#34; ProjectFolder / src / resource / Sounds / click.wav&#34;中列出了该文件。但是当你试图访问时,你拥有了资源&#34;而不是&#34;资源&#34;