Enumeration<URL> configs.hasMoreElements() gives false

£可爱£侵袭症+ 提交于 2019-12-20 06:38:13

问题


I am developing a voice-based app in android and facing some problems please see below code,

Java File 1 file = .wav file

public static AudioInputStream getAudioInputStream(File file) throws UnsupportedAudioFileException, IOException {
    return getAudioInputStreamImpl(file);
}
private static AudioInputStream getAudioInputStreamImpl(Object source) throws UnsupportedAudioFileException, IOException {
    GetAudioInputStreamAudioFileReaderAction action = new GetAudioInputStreamAudioFileReaderAction(source);
    doAudioFileReaderIteration(action);
    AudioInputStream audioInputStream = action.getAudioInputStream();

    if (audioInputStream != null) {
        return audioInputStream;
    }
    throw new UnsupportedAudioFileException("format not supported");
}
private static void doAudioFileReaderIteration(AudioFileReaderAction action) throws IOException {
    Iterator audioFileReaders = TAudioConfig.getAudioFileReaders();
    boolean bCompleted = false;

    while (audioFileReaders.hasNext() && !bCompleted) {
        AudioFileReader audioFileReader = (AudioFileReader) audioFileReaders.next();
        bCompleted = action.handleAudioFileReader(audioFileReader);
    }
}

Java file 2 (TAudioConfig)

public static synchronized Iterator<AudioFileReader> getAudioFileReaders() {
    Iterator<AudioFileReader> it;
    synchronized (TAudioConfig.class) {
        it = getAudioFileReadersImpl().iterator();
    }
    return it;
}
private static synchronized Set<AudioFileReader> getAudioFileReadersImpl() {
    Set<AudioFileReader> set;
    synchronized (TAudioConfig.class) {
        if (sm_audioFileReaders == null) {
            sm_audioFileReaders = new ArraySet();
            registerAudioFileReaders();
        }
        set = sm_audioFileReaders;
    }
    return set;
}
private static void registerAudioFileReaders() {
    TInit.registerClasses(AudioFileReader.class, new C00001());
}

Java File 3 (TInit)

public static void registerClasses(Class providerClass, ProviderRegistrationAction action) {


    Iterator providers = Service.providers(providerClass);
    if (providers != null) {
        while (providers.hasNext()) {
            try {
                action.register(providers.next());
            } catch (Throwable e) {

            }
        }
    }
}

Java File 4 (Service)

public static Iterator<?> providers(Class<?> cls) {

    String strFullName = "com/example/voiceautomator/AudioFileReader.class";

    Iterator<?> iterator = createInstancesList(strFullName).iterator();
    return iterator;
}
private static List<Object> createInstancesList(String strFullName) {   
    List<Object> providers = new ArrayList<Object>();
    Iterator<?> classNames = createClassNames(strFullName);
    if (classNames != null) {
        while (classNames.hasNext()) {
            String strClassName = (String) classNames.next();
            try {
                Class<?> cls = Class.forName(strClassName, REVERSE_ORDER, ClassLoader.getSystemClassLoader());

                providers.add(0, cls.newInstance());
            } catch (Throwable e) {

            }
        }
    }
    return providers;
}
private static Iterator<String> createClassNames(String strFullName) {       
    Set<String> providers = new ArraySet<String>();
    Enumeration<?> configs = null;        
    try {
                    configs =  Service.class.getClassLoader().getSystemResources(strFullName);
    } catch (Throwable e) {

    }
    if (configs != null) {
        while (configs.hasMoreElements()) {
            URL configFileUrl = (URL) configs.nextElement();

            InputStream input = null;
            try {
                input = configFileUrl.openStream();
            } catch (Throwable e2) {


            }
            if (input != null) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                try {
                    for (String strLine = reader.readLine(); strLine != null; strLine = reader.readLine()) {
                        strLine = strLine.trim();
                        int nPos = strLine.indexOf(35);
                        if (nPos >= 0) {
                            strLine = strLine.substring(0, nPos);
                        }
                        if (strLine.length() > 0) {
                            providers.add(strLine);
                        }
                    }
                } catch (Throwable e22) {

                }
            }
        }
    }
    Iterator<String> iterator = providers.iterator();

    return iterator;
}

getClassLoader().getSystemResources in the Java File 4 (Service) gives me TwoEnumerationsInOne and configs.hasMoreElements() gives false so not able to go into while loop.

AudioFileReader.java is included in the package

Please guide me to resolve this issue?

Please don't forget I am working on this code in an android project

Please see the value of configs here

http://capsicumtech.in/Screenshot_1.png

Thanks in advance.

来源:https://stackoverflow.com/questions/36725291/enumerationurl-configs-hasmoreelements-gives-false

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!