当前位置: 首页 > 知识库问答 >
问题:

Google Guava EventBus和事件处理程序中的异常

谷梁宁
2023-03-14

如果您知道可能发生某些异常,您可以向EventBus注册SubscriberExceptionHandler并使用它来处理这些异常。

但是,如果发生未处理的异常,会发生什么呢?通常情况下,我希望一个未处理的异常“冒出”调用链。使用SubscriberExceptionHandler时,我可以访问事件处理程序中抛出的原始异常,我只想重新抛出它。但我不知道是怎么回事。

那么,无论是否使用SubscriberExceptionHandler,如何确保事件处理程序中的意外异常不会被“吞噬”呢?

共有1个答案

于正志
2023-03-14

如果要处理未经检查的异常,可以像这样实现SubscriberExceptionHandler的方法:

public void handleException(Throwable exception, SubscriberExceptionContext context) {
    // Check if the exception is of some type you wish to be rethrown, and rethrow it.
    // Here I'll assume you'd like to rethrow RuntimeExceptions instead of 'consuming' them.
    if (exception instanceof RuntimeException) {
        throw (RuntimeException) exception;
    }

    // If the exception is OK to be handled here, do some stuff with it, e.g. log it.
    ...
}

创建实现SubscriberExceptionHandler接口的类后,可以将其实例传递给EventBus的构造函数:

EventBus eventBus = new EventBus(new MySubscriberExceptionHandler());

并且完成后,EventBus将使用您的异常处理程序,它将使RuntimeExceptions弹出。

 类似资料:
  • 本文向大家介绍详解JavaScript中的事件流和事件处理程序,包括了详解JavaScript中的事件流和事件处理程序的使用技巧和注意事项,需要的朋友参考一下 事件流:分两种,IE的是 事件冒泡流 ,事件开始时从最具体的元素接收,逐级向上传播到较为不具体的节点(Element -> Document)。与之相反的是 Netscape 的 事件捕获流 。 DOM2级事件规定事件流包括三个阶段:事件捕

  • 本文向大家介绍学习JavaScript事件流和事件处理程序,包括了学习JavaScript事件流和事件处理程序的使用技巧和注意事项,需要的朋友参考一下 本文全篇介绍了JavaScript事件流和事件处理程序,分享给大家供大家参考,具体内容如下 一、事件流 事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,而Netscape Communicator的事件流是事件捕获流。 二、事件冒泡

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 我已经在JList上有一个这样的自定义控件库 但是我希望Jlist有滚动条,所以我将自定义控件的超类更改为JScrollPane并将JList添加到其中。像这样的代码 好吧,如果MyClass扩展了JList,在JFrame中我可以将MouseListener添加到MyClass对象中,在mouseClick中我比较MouseEvent getSource是MyClass的一个实例并调用MyCla

  • 如果我有以下代码: 对该循环中某个处理程序的所有调用是并行执行还是顺序执行?如果是顺序的,那么要获得并行执行,正确的方法是什么? 当做

  • 我研究Flink已经一个多星期了。我们正在从Kafka消费事件,我们希望事件属于一个特定的对象id需要按照事件时间的顺序进行处理。到目前为止,我的研究告诉我,我应该使用keyby和timewinds,我的理解是正确的吗? 另一个问题是,当一个任务管理器关闭时,只有属于该任务管理器的事件才会被停止处理,直到该任务管理器启动?检查点机制是否知道未被处理的事件,它将如何请求Kafka关于这些事件? 下面