我在这个论坛上发现了很多关于这个主题的类似问题,但是这些问题的解决方案都没有为我和这个问题解决,这让我很沮丧。
我有以下方法在调用它时应该播放 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 文件并毫无例外地播放该文件?
感谢任何形式的帮助。 提前谢谢。
答案 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;