Java NetBeans在JAR文件中获取资源?

Java NetBeans在JAR文件中获取资源?,java,netbeans,getresource,Java,Netbeans,Getresource,我一直在尝试在我的Netbeans Java项目中包含一些图像和声音,我在谷歌搜索了所有答案,所有这些我都尝试过并实现了,但有些人在Netbeans内部运行音频文件时正确播放了音频文件,但当它实际构建为JAR文件时却没有 在执行JAR文件时,我正在努力播放声音。据我所知,项目中的包/文件夹被编译并构建到JAR文件中 有人能告诉我如何正确获取资源的正确方向吗 我的代码如下: public void SND_REQUEST() { AudioInputStream clipNameAIS;

我一直在尝试在我的Netbeans Java项目中包含一些图像和声音,我在谷歌搜索了所有答案,所有这些我都尝试过并实现了,但有些人在Netbeans内部运行音频文件时正确播放了音频文件,但当它实际构建为JAR文件时却没有

在执行JAR文件时,我正在努力播放声音。据我所知,项目中的包/文件夹被编译并构建到JAR文件中

有人能告诉我如何正确获取资源的正确方向吗

我的代码如下:

public void SND_REQUEST() {
    AudioInputStream clipNameAIS;
    Clip clipNameClip = null;
    try {
        clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/Sounds/Cat.wav"));
        clipNameClip = AudioSystem.getClip();
        clipNameClip.open(clipNameAIS);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null,"Request Button Sound Not Working");
    }
    clipNameClip.setFramePosition(0);
    clipNameClip.start();
}
资源结构:

更新-22:45:

在Netbeans内部运行时,它似乎可以工作,但在可执行Jar文件中不起作用。 我尝试了两种方法,我会发布图片: 文件当然在里面,谢谢你在那一刻的帮助

更新代码:

   public void SND_REQUEST() {
        AudioInputStream clipNameAIS;
        Clip clipNameClip = null;
        try {
            clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav"));
            clipNameClip = AudioSystem.getClip();
            clipNameClip.open(clipNameAIS);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Request Button Sound Not Working");
        }
        clipNameClip.setFramePosition(0);
        clipNameClip.start();
    }
结果:

打印堆栈跟踪:

更新-作品::

啊,发现问题了,谢谢你的帮助。没有想到在JOptionPane msgbox lol中传递E.printstack跟踪:似乎我需要BufferReader才能正确地流式处理它。而且路径是正确的。请看我的更新代码,它的工程:再次感谢

public void SND_REQUEST() {
    AudioInputStream clipNameAIS;
    Clip clipNameClip = null;
    try {
        InputStream audioSrc = getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav");
        InputStream bufferedIn = new BufferedInputStream(audioSrc);
        AudioInputStream audioStream = AudioSystem.getAudioInputStream(bufferedIn);

        clipNameClip = AudioSystem.getClip();
        clipNameClip.open(audioStream);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
        return;
    }
    clipNameClip.setFramePosition(0);
    clipNameClip.start();
}
有人能告诉我如何正确获取资源的正确方向吗

假定资源在创建的jar文件中,您可以将路径定义为相对于包根的绝对路径:

clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav"));

注意开始处的/将路径定义为相对于包根的绝对路径。您还可以定义相对于调用类的相对路径。例如,如果调用类位于/overtimesystem/Images/package中,则可以使用../Sounds/Cat.wav来访问资源。我认为路径应该是overtimesystem/Sounds/Cat.wav。如果以zip格式打开JAR文件,是否可以看到.wav文件?使用jar中找到的它们的路径。@AlpaxJ1打印堆栈跟踪,例如e.printStackTrace;要准确地验证异常是什么,isPlesae会看到我的打印堆栈跟踪更新,nullpointer exception说?路径不正确,它不可能是…啊,在JAR文件中运行它会出现以下错误:@AlpaxJ1,该链接建议如果出现此问题,您应该获得IOException而不是NullPointerException。但如果成功了,恭喜你。
clipNameAIS = AudioSystem.getAudioInputStream(getClass().getResourceAsStream("/overtimesystem/Sounds/Cat.wav"));