diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/spi/JdkServiceLoaderUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/spi/JdkServiceLoaderUtil.java index 1d205a860b..3ded905ea9 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/spi/JdkServiceLoaderUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/spi/JdkServiceLoaderUtil.java @@ -49,11 +49,20 @@ public class JdkServiceLoaderUtil { */ public static T loadFirstAvailable(final Class clazz) { final Iterator iterator = load(clazz).iterator(); - while (iterator.hasNext()) { + while (true) { + final T instance; try { - return iterator.next(); - } catch (final ServiceConfigurationError ignore) { - // ignore + // 注意:JDK 24+ 下 hasNext() 和 next() 均可能触发 NoClassDefFoundError + if (!iterator.hasNext()) { + break; + } + instance = iterator.next(); + } catch (ServiceConfigurationError | NoClassDefFoundError e) { + // 安全忽略当前实现,尝试下一个 + continue; + } + if (instance != null) { + return instance; } } return null;