这是库 tinySound 提供的示例
:https://github.com/finnkuusisto/TinySound/blob/master/example/TinySoundExample.java
我阅读了示例,并编写了基本代码来测试其功能:
TinySound.init();
Music forest = TinySound.loadMusic("absolutepath/day.ogg");
forest.play(true);
执行后,我得到:Unable to find resource /absolutepath/day.ogg!
我使用Visual Studio代码工作,并且想知道为什么Java即使在输入的路径是绝对路径且资源在工作区中时也找不到文件。这是简化的项目树结构:
/Project
|------/ResourceMusic-----/forest----day.ogg
|------/lib
|------/bin
|------/src----Main.java (location of my test of tinySound)
最佳答案
为了确认您提供的文件结构,我假设以下两个文件。
Project/src/Main.java
Project/ResourceMusic/forest/day.ogg
我会尝试以下方法: Music forest = TinySound.loadMusic("ResourceMusic/forest/day.ogg");
但是我不是100%肯定会奏效。这是我对正在发生的事情的最佳理解。
文字类
TinySound
包含以下用于读取资源的代码(经过多次验证):URL url = TinySound.class.getResource(name);
现在,如果name
是一个相对地址,则该文件应该相对于TinySound
类本身所在的文件夹定位。但是由于前面加上了“/”(可以通过查看源代码看到),因此使用了绝对地址。因此,项目源的顶部文件夹用作根地址。例如,我有一个名为“ScratchPad”的Eclipse项目。其中包含一个名为“dodads”的包,其中包含以下类:
package dodads;
import java.net.URL;
public class TestAbsoluteAddressing
{
public static void main(String[] args)
{
TestAbsoluteAddressing taa = new TestAbsoluteAddressing();
taa.doAbsTest();
}
private void doAbsTest()
{
URL url = this.getClass().getResource("myAudio.wav");
URL url2 = this.getClass().getResource("/myAudio.wav");
if (url != null) System.out.println("relative found");
else System.out.println("relative not found");
if (url2 != null) System.out.println("absolute found");
else System.out.println("absolute not found");
}
}
以下文件结构引起“相对找到”和“绝对找不到”:ScratchPad/src/doodads/TestAbsoluteAddressing.java
ScratchPad/src/doodads/myAudio.wav
以下文件结构引起“相对找不到”和“绝对找到”:ScratchPad/src/doodads/TestAbsoluteAddressing.java
ScratchPad/src/myAudio.wav
现在,令人担忧的是,您给我的文件结构不包含“src”文件夹。因此,我不确定我给您的地址是否可以使用。