java - 将 Swing 事件可观察量与其他可观察量相结合

标签 java rx-java

我有一个显示错误消息的标签。如果双击它,您会看到一个显示整个堆栈跟踪的大对话框。我有两个可观察对象:一个用于错误,一个用于点击事件:

final ConnectableObservable<Notification> errorNotifications = pm
    .getNotificationObservable()
    .filter(notification -> notification.getType().isError() && !notification.getLongMessage().isEmpty())
    .replay(1);

errorNotifications.connect();

SwingObservable.fromMouseEvents(dialog.getMessagePanel().getMessageLabel())
               .map(MouseEvent::getClickCount)
               .filter(number -> number >= 2)
               .subscribe(integer -> errorNotifications
                   .take(1)
                   .subscribe(notification -> ErrorDialog.showError(dialog.getFrame(), "Error", notification.getLongMessage())));

如果我从点击可观察中订阅通知,我会过滤可观察到的通知,仅显示错误并重播最后一个错误。

现在我的问题是,RxJava 中是否有任何运算符可以让我更......巧妙地完成此操作?我尝试使用 combineLatest() 但这会产生效果,每次发生错误时都会打开对话框。

以更抽象的方式:我有两个可观察量,一个就像“主”:如果主可观察量(点击可观察)发出一个项目,另一个可观察量(我的错误通知)应该发出最新的项目。 p>

最佳答案

在订阅中使用另一个 Observable 通常是一个设计缺陷。

您可以在 response 中检查 flatMap 运算符。 。它将帮助您在发出另一个事件时发出错误通知。

例如,如果您想在代码中使用 flatMap 运算符,可以这样更新:

 final ConnectableObservable<Notification> errorNotifications = 
                                                  pm.getNotificationObservable()
                                                    .filter(notification -> notification.getType().isError() && !notification.getLongMessage().isEmpty())
                                                    .replay(1);

errorNotifications.connect();

SwingObservable.fromMouseEvents(dialog.getMessagePanel().getMessageLabel())
           .map(MouseEvent::getClickCount)
           .filter(number -> number >= 2)
           .flatMap(integer -> errorNotifications.take(1))
           .subscribe(notification -> ErrorDialog.showError(dialog.getFrame(), "Error", notification.getLongMessage())));

关于java - 将 Swing 事件可观察量与其他可观察量相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790099/

相关文章:

java - 使用UUID作为数据库主键,Java类型是byte[]

rx-java - RxJava可观察到的: Invoke onError and then retry

android - 空闲资源繁忙时测试 UI

java - 如何在 Spring MVC 中获取确切的客户端浏览器名称和版本?

java - 查看具有 2 种可能布局的绑定(bind),将绑定(bind)变量分配给 2 个生成的绑定(bind)类

java - Spring Security 教程不适用于 Tomcat 服务器

java - 文件textFile.txt未找到异常

android - 如何使用 rxjava 在改造 2.0 中获取请求 url?

java - 删除/丢弃 RxJava 中 Observable 的最后一个数据值

java - 如何在另一个线程上运行 RxJava 观察者