2014-11-25 5 views
0

Netbeans 8.0에는 여러 모듈이 포함 된 프로젝트가 있습니다. 하나의 모듈이 javax.sound.sampled 라이브러리를 사용하여 재생할 오디오 파일에 대해 파일 선택기를 열길 원합니다. 나는 AudioSystem.getAudioFileTypes()을 사용하여 사용할 수있는 파일 유형을 얻고 3 개의 가용 파일 ('wav', 'au'및 'aif') 만 볼 수 있지만 mp3, ogg 및 flac도 처리 할 수 ​​있기를 바랍니다. .내 Netbeans 플랫폼 프로젝트에 추가 된 SPI jar가 등록되지 않는 이유는 무엇입니까?

그래서 필요한 코덱 용 SPI를 다운로드했습니다. 모든 문서에서 클래스 패스에 jar 파일 만 넣으면되고 자바의 사운드 라이브러리에서 코덱을 사용할 수 있다고 나와 있습니다. 내 프로젝트에서 두 개 이상의 모듈이이 라이브러리를 사용할 수 있기를 원하기 때문에 모듈 래퍼를 만들었습니다. 따라서, 예를 들어, 나는 두 개의 항아리를 래핑 jflac-1.3-JDK라는 내 프로젝트 하나 개의 모듈에 있습니다 jflac-1.3-jdk1.4.jarjflac-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(); 
    } 
} 

: 여기

래퍼 모듈에 따라 모듈의 상단 구성 요소의 코드입니다.

답변

0

SPI는 ServiceLoader 메커니즘을 사용하여 등록해야합니다. 다운로드 한 jar는 그렇지 않습니다. 아마도 패키지에있는 버그 일 것입니다.

은 내가 jflac을 사용한 적이 있지만, 등록해야 것 같습니다 :

  • org.kc7bfi.jflac.sound.spi.FlacAudioFileReaderjavax.sound.sampled.spi.AudioFileReader A와와 javax.sound.sampled.spi.FormatConversionProvider
  • org.kc7bfi.jflac.sound.spi.FlacFormatConversionProvider.

source repository에는 실제로 필요한 서비스 파일이 들어 있습니다. 리소스에 META-INF/services 아래에 추가하십시오.

+0

고마워요! 그러나 어떻게 이러한 리소스를 추가합니까? jar 파일에 넣은 다음 래퍼 모듈을 삭제하고 다시 만들려고했으나 작동하지 않았습니다. 래퍼 모듈에서'libraries' 아래에 jar 파일을 볼 수 있으며 각각을 확장하여 META-INF 노드를 찾을 수는 있지만 매니페스트 파일 만이 '서비스'노드가 아닙니다. –

+0

또한 jflac 모듈의'source packages' 노드 아래에'META-INF'라는 폴더를 새로 만들었습니다. 그 안에'services' 폴더를 만들고 IDE 외부에서 두 파일을 그 폴더에 복사했습니다. 그러나 여전히 효과가 없습니다. –

+0

@ Toby1Kenobi [This] (http://stackoverflow.com/q/16633244/3707)는 여러분이'META-INF/services' 아래서 소스 디렉토리에 파일을 추가했다는 것을 나타내는 것 같습니다. – jackrabbit