2014-11-25 33 views
0

在Netbeans 8.0中,我有一個包含多個模塊的項目。我希望有一個模塊可以打開文件選擇器,以查找應用程序將使用javax.sound.sampled庫播放的音頻文件。我使用AudioSystem.getAudioFileTypes()來獲取可以使用的文件類型,並看到只有3個可用('wav','au'和'aif'),但我也希望能夠處理mp3,ogg和flac 。爲什麼我的Netbeans平臺項目中不能添加SPI罐註冊?

所以我下載了我需要的編解碼器的SPI。所有的文檔都告訴我,我只需要將jar放入classpath中,編譯碼器就可以用於Java的聲音庫。在我的項目中,我希望不止一個模塊能夠使用這些庫,所以我爲它們創建了模塊包裝器。因此,舉例來說,我在我的項目中一個叫jflac-1.3-jdk的它包裝兩瓶模塊:jflac-1.3-jdk1.4.jarjflac-1.3.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(); 
    } 
} 

我使用調試器在這個代碼,看看該文件類型我想都沒有。

回答

0

SPI應該使用ServiceLoader機制進行註冊,該機制似乎並不是您下載的jar包。這可能是他們包裝中的一個錯誤。

我從來沒有使用jflac,但它看起來像要註冊:

  • org.kc7bfi.jflac.sound.spi.FlacAudioFileReaderjavax.sound.sampled.spi.AudioFileReader
  • org.kc7bfi.jflac.sound.spi.FlacFormatConversionProvider作爲javax.sound.sampled.spi.FormatConversionProvider

source repository實際上包含必要的服務文件。將這些添加到您的資源META-INF/services

+0

謝謝!但是,我如何添加這些資源?我試圖把它們放入jar文件,然後刪除我的包裝模塊並重新制作它,但那不起作用。在包裝模塊中,我可以看到'libraries'下的jar文件,我可以擴展每個文件以找到'META-INF'節點,但沒有'services'節點在這些節點下,只有一個清單文件。 – 2014-11-25 09:05:02

+0

同樣在jflac模塊的'source packages'節點下,我創建了一個新文件夾'META-INF',並創建了一個文件夾'services',然後在IDE之外將這兩個文件複製到該文件夾​​中。但仍然無效。 – 2014-11-25 09:51:37

+0

@ Toby1Kenobi [This](http://stackoverflow.com/q/16633244/3707)似乎表明您將這些文件添加到您的源代碼目錄下'META-INF/services'下。 – jackrabbit 2014-11-25 20:54:03

相關問題