Używam EventBus guava, niestety przechwytuje i rejestruje wyjątek InvocationTargetException, który występuje, gdy event-handler zgłasza wyjątek RuntimeException. Czy mogę wyłączyć to zachowanie?Guava EventBus: nie łapię RuntimeException
8
A
Odpowiedz
8
W obecnej formie, jest to przemyślana decyzja i omówione w docs EventBus:
Rączki nie powinny w ogóle wyrzucić. Jeśli tak się stanie, EventBus złapie i zarejestruje wyjątek. To rzadko jest właściwe rozwiązanie do obsługi błędów i nie należy polegać na nim; jest przeznaczony wyłącznie do pomocy w znalezieniu problemów podczas programowania.
rozwiązania alternatywne są being considered, choć wątpię oni uczynić go do wydania 12.
4
Oto kod dla leniwych
public class Events
{
public static EventBus createWithExceptionDispatch()
{
final EventBus bus;
MySubscriberExceptionHandler exceptionHandler = new MySubscriberExceptionHandler();
bus = new EventBus(exceptionHandler);
exceptionHandler.setBus(bus);
return bus;
}
private static class MySubscriberExceptionHandler implements SubscriberExceptionHandler
{
@Setter
EventBus bus;
@Override
public void handleException(Throwable exception, SubscriberExceptionContext context)
{
ExceptionEvent event = new ExceptionEvent(exception, context);
bus.post(event);
}
}
}
Teraz możesz zapisać ExceptionEvent
.
Oto moja ExceptionEvent
dla prostu skopiować & pasty
@Data
@Accessors(chain = true)
public class ExceptionEvent
{
private final Throwable exception;
private final SubscriberExceptionContext context;
private final Object extra;
public ExceptionEvent(Throwable exception)
{
this(exception, null);
}
public ExceptionEvent(Throwable exception, Object extra)
{
this(exception,null,extra);
}
public ExceptionEvent(Throwable exception, SubscriberExceptionContext context)
{
this(exception,context,null);
}
public ExceptionEvent(Throwable exception, SubscriberExceptionContext context, Object extra)
{
this.exception = exception;
this.context = context;
this.extra = extra;
}
}
0
Wystarczy dziedziczyć EventBus guawa i napisać jesteś właścicielem niestandardową eventbus. Wskazówki: Ta klasa powinna pisać w pakiecie com.google.common.eventbus, aby można było nadpisać metodę wewnętrzną.
package com.google.common.eventbus;
import com.google.common.util.concurrent.MoreExecutors;
public class CustomEventBus extends EventBus {
/**
* Creates a new EventBus with the given {@code identifier}.
*
* @param identifier a brief name for this bus, for logging purposes. Should be a valid Java
* identifier.
*/
public CustomEventBus(String identifier) {
super(
identifier,
MoreExecutors.directExecutor(),
Dispatcher.perThreadDispatchQueue(),
LoggingHandler.INSTANCE);
}
/**
* Creates a new EventBus with the given {@link SubscriberExceptionHandler}.
*
* @param exceptionHandler Handler for subscriber exceptions.
* @since 16.0
*/
public CustomEventBus(SubscriberExceptionHandler exceptionHandler) {
super(
"default",
MoreExecutors.directExecutor(),
Dispatcher.perThreadDispatchQueue(),
exceptionHandler);
}
@Override
void handleSubscriberException(Throwable e, SubscriberExceptionContext context) {
throw new EventHandleException(e);
}
}
Powiązane problemy
- 1. Guava java EventBus błąd wystąpienia
- 2. Adnotacje vs. Interfejs w Guava EventBus
- 3. Różnice między Greenrobot EventBus i guawy za EventBus
- 4. EventBus i Proguard: Nie można wysyłką zdarzenie
- 5. EventBus 3,0 registerSticky przestarzałe
- 6. Rola EventBus w GWT
- 7. Wykonywanie sprawdzanego wyjątku RuntimeException
- 8. Playframework: [RuntimeException: java.lang.reflect.InvocationTargetException]
- 9. Przykład Akka EventBus dla Javy
- 10. Guava cache i konserwowanie sprawdzane wyjątki
- 11. EventBus, rejestracja i rejestracjaSticky method
- 12. Guava - dlaczego nie jest IncomparableValueException public?
- 13. znaczenie RuntimeException ("Stub!") W Androidzie
- 14. Eventbus GreenRobota nie widzi adnotacji "brak publicznych metod"
- 15. GWT GIN - trywialne use-case nie powiedzie się (EventBus)
- 16. Guava: Gdzie jest CharEscaper?
- 17. Guava: Throwables.propagate i InterruptedException
- 18. Dziwna implementacja Guava LongMath.checkedAdd
- 19. Guava Ticker Cache wygasają
- 20. Opis metody Guava TypeToken.isAssignableFrom
- 21. Guava SetsInsesection Bad Performance
- 22. Trie realizacji w Guava?
- 23. Biblioteki Guava i GWT
- 24. Guava MultiSet vs mapa?
- 25. Kiedy używać Guava sameThreadExecutor
- 26. Dlaczego wyjątek RuntimeException nie wymaga jawnej obsługi wyjątku?
- 27. Android 6.0 RuntimeException: nie można połączyć się z usługą kamery
- 28. Czy Akka EventBus działa ze zdalnymi aktorami?
- 29. Korzystanie z EventBus, pamięci i architektury
- 30. Jak używać typu wywołania z EventBus
Czy możesz naprawić ten link? –
Poprawiono linkowanie, wypróbuj teraz. –