eActor имеет функцию-обработчик исключений, которую можно переопределить:
override def exceptionHandler = {
case e: Exception =>
println(e.getMessage())
}
Всякий раз, когда в актере возникает исключение, которое обычно приводит к его завершению - к исключению применяется частичная функция exceptionHandler
.
Редактировать
С фильтром исключений:
class ExceptionalActor extends Actor{
def act() {
loop {
react {
case "bad" => throw new NoSuchFieldException("Bad Message")
case "impossible" => throw new Exception("Impossible Exception")
case m => println("non-bad message " + m )
}
}
}
override def exceptionHandler = {
case e: NoSuchFieldException => println("handled " + e.getMessage() )
}
}
object Tester extends App {
val eActr = new ExceptionalActor
eActr start
eActr ! "any message1"
eActr ! "bad"
eActr ! "any message2"
eActr ! "impossible"
eActr ! "any message3"
}
производит:
non-bad message any message1
handled Bad Message
non-bad message any message2
org.scratch.act.ExceptionalActor@7f5663a2: caught java.lang.Exception: Impossible Exception
:
И актерская смерть.
ref: Актеры в Scala