gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:26:37 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com