首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.VerifyError IllformedLocaleException

java.lang.VerifyError IllformedLocaleException
EN

Stack Overflow用户
提问于 2016-04-13 22:52:24
回答 1查看 1.4K关注 0票数 14

我有以下父方法,在所有情况下都由各种API级别使用:

代码语言:javascript
复制
public int setVoice (@NonNull final String language, @NonNull final String region){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        return setVoice21(language, region);
    } else {
        return setVoiceDeprecated(language, region);
    }
}

setVoice21做了这样的事情:

代码语言:javascript
复制
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int setVoice21 ( @NonNull final String language, @NonNull final String region){

    try {
        // try some API 21 stuff
    } catch (final IllformedLocaleException e) {
        e.printStackTrace();
        return setVoiceDeprecated(language, region);
    }

setVoice21包含其他需要API 21+ (特别是TextToSpeech.VoiceLocale.Builder )的代码。

当我在设备< API 21上运行这段代码时,会得到以下错误:

W/dalvikvm: VFY:无法解析异常类6232 (Ljava/util/IllformedLocaleException;) W/dalvikvm: VFY:在0x0168 W/dalvikvm: VFY拒绝操作码0x0d : VFY:拒绝接受Lcom/myapp/android/speech/MyTextToSpeech;.setVoice21 (Ljava/lang/String;Ljava/lang/String;)I W/dalvikvm:验证器拒绝的类Lcom/myapp/android/speech/MyTextToSpeech; E/AndroidRuntime:致命异常:主java.lang.VerifyError: com/myapp/android/speech/MyTextToSpeech

如果我删除IllformedLocaleException并将其替换为标准异常,则应用程序运行良好,尽管在setVoice21中有许多其他对方法> API21的引用

为了进一步混淆我,setVoice21调用了下面的类

代码语言:javascript
复制
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private class TTSVoice {

    public void buildVoice() {

        try {
            // Do some API 21 stuff
        } catch (final IllformedLocaleException e) {
        }

    }
}

这个类只从setVoice21中引用,但是我不必在这里删除对IllformedLocaleException的引用--我可以离开它,应用程序运行得很好.不知所措。

有人能帮我弄清楚为什么IllformedLocaleException会导致这个失败吗?异常是否以不同的方式处理?

我提前感谢你。

注意-我不确定它是否相关,但我正在以标准的方式对TextToSpeech进行子类化。我担心这可能会使问题变得复杂,但以防万一.

代码语言:javascript
复制
public class MyTextToSpeech extends TextToSpeech {

    public MyTextToSpeech(final Context context, final OnInitListener listener) {
        super(context, listener);
    }
}

编辑--解决由下面的razzledazzle提供的方法,确实允许应用程序在不崩溃的情况下运行,但对于为什么需要这样的步骤,我仍然不太清楚。在处理API版本控制时,我以前从未采取过这样的措施。

EN

回答 1

Stack Overflow用户

发布于 2016-04-17 04:05:34

通过从catch参数中移除IllformedLocaleException类解决了这个问题。这仍然允许您检查IllformedLocaleException

代码语言:javascript
复制
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int setVoice21 (@NonNull final String language, @NonNull final String region) {
    try {
        // try some API 21 stuff
        ...
    } catch (final Exception e) {
        e.printStackTrace();
        if (e instanceof IllformedLocaleException) {
            ...
        }
    }

    ...
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36610941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档