为什么我的Netbeans平台项目中没有添加SPI jar寄存器?

时间:2014-11-25 05:33:03

标签: java audio netbeans netbeans-platform netbeans-8

在Netbeans 8.0中,我有一个包含多个模块的项目。我想要一个模块为应用程序将使用javax.sound.sampled库播放的音频文件打开文件选择器。我使用AudioSystem.getAudioFileTypes()来获取可以使用的文件类型,并看到只有3个可用('wav','au'和'aif'),但我也希望能够处理mp3 ,ogg和flac。

所以我下载了我需要的编解码器的SPI。所有文档告诉我,我只需要将jar放入类路径中,编解码器将可用于Java的声音库。在我的项目中,我希望多个模块能够使用这些库,因此我为它们创建了模块包装器。所以,例如,我在我的项目中有一个名为 jflac-1.3-jdk 的模块,它包装了两个罐子: jflac-1.3-jdk1.4.jar jflac-1.3.jar 然后我将打开文件选择器的模块依赖于这些包装jar的模块。

仍然只有相同的3种文件类型可用。我错过了什么?

以下是模块顶层组件中依赖于包装器模块的代码:

private static String[] audioFileExtensions;
static
{
    AudioFileFormat.Type[] formatTypes = AudioSystem.getAudioFileTypes();
    audioFileExtensions = new String[formatTypes.length];
    for (int i = 0; i < formatTypes.length; i++) {
        audioFileExtensions[i] = formatTypes[i].getExtension();
    }
}

我在此代码中使用调试器来查看我想要的文件类型不可用。

1 个答案:

答案 0 :(得分:0)

应使用ServiceLoader机制注册SPI,您下载的罐子似乎不会这样做。这可能是他们包装中的一个错误。

我从未使用过jflac,但看起来你应该注册:

  • org.kc7bfi.jflac.sound.spi.FlacAudioFileReader作为javax.sound.sampled.spi.AudioFileReader
  • org.kc7bfi.jflac.sound.spi.FlacFormatConversionProviderjavax.sound.sampled.spi.FormatConversionProvider

source repository实际上包含必要的服务文件。将这些内容添加到META-INF/services下的资源中。