首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Guice导致抛出UncaughtExceptionHandler

Guice导致抛出UncaughtExceptionHandler
EN

Stack Overflow用户
提问于 2018-06-05 14:14:15
回答 2查看 5.4K关注 0票数 1

我想在我的应用程序中使用Guice,但当我想要运行它时,它会抛出以下异常:

代码语言:javascript
复制
Exception in thread "main" 
Exception: com.google.common.util.concurrent.UncheckedExecutionException thrown from the UncaughtExceptionHandler in thread "main"

当我用try包装main()函数时...catch块我收到folloving:

代码语言:javascript
复制
Exception in thread "main" com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2047)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3869)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3873)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4798)
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4804)
    at com.google.inject.internal.util.StackTraceElements.forMember(StackTraceElements.java:71)
    at com.google.inject.internal.Messages.formatSource(Messages.java:241)
    at com.google.inject.internal.Messages.formatSource(Messages.java:220)
    at com.google.inject.internal.Messages.formatMessages(Messages.java:90)
    at com.google.inject.CreationException.getMessage(CreationException.java:50)
    at java.base/java.lang.Throwable.getLocalizedMessage(Throwable.java:396)
    at java.base/java.lang.Throwable.toString(Throwable.java:485)
    at java.base/java.lang.String.valueOf(String.java:2788)
    at java.base/java.io.PrintStream.println(PrintStream.java:897)
    at java.base/java.lang.Throwable$WrappedPrintStream.println(Throwable.java:752)
    at java.base/java.lang.Throwable.printStackTrace(Throwable.java:659)
    at java.base/java.lang.Throwable.printStackTrace(Throwable.java:648)
    at java.base/java.lang.Throwable.printStackTrace(Throwable.java:639)
    at com.github.blackjack.Main.main(Main.java:31)
Caused by: java.lang.IllegalArgumentException
    at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:160)
    at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:143)
    at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:418)
    at com.google.inject.internal.util.LineNumbers.<init>(LineNumbers.java:64)
    at com.google.inject.internal.util.StackTraceElements$1.load(StackTraceElements.java:49)
    at com.google.inject.internal.util.StackTraceElements$1.load(StackTraceElements.java:45)
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3443)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2169)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2128)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2041)
    ... 18 more

从信息中我发现这个异常是由包含lambda定义的方法引起的,是由Provides方法抛出的。然而,它应该在Guice 4.0中修复。也许有人知道如何修复它,并能提供帮助?提前感谢!

main()函数:

代码语言:javascript
复制
public static void main (String[] args){
    try{
        MainModule module = new MainModule();
        Injector injector = Guice.createInjector(module);

        GameFactory gameFactory = injector.getInstance(GameFactory.class);
        DeckFactory blackjackDeckFactory = injector.getInstance(BlackjackDeckCreator.class);
        PlayerFactory playerFactory = injector.getInstance(PlayerFactory.class);

        Player player = playerFactory.createPlayer("Paul");
        Player dealer = playerFactory.createPlayer("Dealer", true);

        Deck deck = blackjackDeckFactory.createDeck();

        Game game = gameFactory.createGame(player, dealer, deck);
        game.start();
    } catch (Exception e){
        e.printStackTrace(); // line 31
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-06-06 10:57:16

我用的是Java10,但也试过8和9,什么都没用。

我认为您没有使用Java8或9,因为由于使用Java10或更高版本,所以从ClassReader抛出了异常。

https://gitlab.ow2.org/asm/asm/blob/f7f44a8e306dd2bd70f0db50194f6366938579c5/src/org/objectweb/asm/ClassReader.java#L160

Opcodes.V9的意思是Java9。所以请再次检查您的Java版本,并在Java9或更早的版本上运行。

票数 3
EN

Stack Overflow用户

发布于 2022-01-28 20:16:19

我知道这是一个老帖子。在这里发布解决方案以获得可见性-

问题应该是与GoogleGuice 4.0的JDK11不兼容。

Guice 4.0不支持Java 9(或更高版本),但Guice 4.2支持。因此,您应该在GoogleGuice-4.2上添加一个显式依赖项,一切都应该正常工作!

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

https://stackoverflow.com/questions/50693221

复制
相关文章

相似问题

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