这是库 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”文件夹。因此,我不确定我给您的地址是否可以使用。

10-05 23:30