try-with-resources IncompatibleClassChangeError:接口未在API 16上实现

时间:2019-04-02 20:49:33

标签: android try-with-resources

根据Android教程https://developer.android.com/studio/write/java8-support#supported_features,当使用Java 8时,try-with-resources与所有API级别兼容。

当前,我在这种和平的代码中遇到了异常:

try (final AssetFileDescriptor afd = context.getResources().openRawResourceFd(resId)) {
    if (sample.load(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength())) {
        if (!sample.isClosedSet()) sample.play(leftVolume, rightVolume, rate);
    }
} catch (Exception e) {
    e.printStackTrace();
}

例外是:

java.lang.IncompatibleClassChangeError: interface not implemented
        at com.olekdia.supportsoundpool.SoundPoolCompat.$closeResource(SoundPoolCompat.java:260)
....

它发生在Andriod 4.2(api 16)上,但可以在更新的Android上正常工作。

我的gradle中也有这些行:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

这怎么了?

0 个答案:

没有答案