Qu'est-ce qu'une erreur boxée dans Scala?

quand j'exécute mon application, le navigateur affiche

[ExecutionException: Boxed Error]

il ne dit rien au sujet du numéro de ligne, etc.

dans la console, j'ai le suivant

! @6elaah0c8 - Internal server error, for (GET) [/testlearn] ->

play.api.Application$$anon: Execution exception[[ExecutionException: Boxed Error]]
    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
    at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$$anonfun$apply.apply(PlayDefaultUpstreamHandler.scala:326) [play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$$anonfun$apply.apply(PlayDefaultUpstreamHandler.scala:324) [play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1.apply(Promise.scala:113) [play_2.10.jar:2.1.1]
java.util.concurrent.ExecutionException: Boxed Error
    at scala.concurrent.impl.Promise$.resolver(Promise.scala:52) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at scala.concurrent.impl.Promise$.scala$concurrent$impl$Promise$$resolveTry(Promise.scala:44) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:116) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at scala.concurrent.Promise$class.complete(Promise.scala:55) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:58) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:23) [factorie-1.0.0-M4-jar-with-dependencies.jar:na]
Caused by: java.lang.AssertionError: assertion failed
    at scala.Predef$.assert(Predef.scala:165) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at cc.factorie.util.TraversableExtras$class.max2ByDouble(TraversableExtras.scala:95) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at cc.factorie.package$$anon.max2ByDouble(package.scala:148) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at cc.factorie.optimize.SampleRankExample.accumulateExampleInto(SampleRank.scala:31) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples.apply(Trainer.scala:72) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
    at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples.apply(Trainer.scala:63) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]
29
demandé sur yzernik 2013-06-24 00:31:07

2 réponses

"Boxed " Erreur" est à la Scala en réponse à une Error être jeté dans un Future . En Java, et donc en Scala, les sous-classes de type Error ont une signification particulière comme "1519110920 erreurs" fatales . Voir différences entre L'Exception et L'erreur . En bref, le javadoc dit:

une erreur est une sous-classe de Lancable qui indique des problèmes graves qu'une application raisonnable ne devrait pas essayer attraper. La plupart de ces les erreurs sont des conditions anormales.

contrairement à lancer d'autres Throwable s dans un futur, quand une sous-classe de Error est lancée, le résolveur Scala par défaut enveloppera le Error dans un java.util.concurrent.ExecutionException , avec la chaîne de message" Erreur encadré", et compléter votre promesse avec un échec.

pour citer la documentation sur les contrats à terme http://docs.scala-lang.org/overviews/core/futures.html W. R. T. Error être jeté:

[Erreur] les exceptions sont relancés dans le fil de l'exécution de l'échec de l' calcul asynchrone. Le raisonnement derrière cela est à éviter propagation des exceptions critiques et liées au débit de régulation normalement ne pas traiter par le code client et en même temps informer le client dans lequel futur le calcul a échoué.

Si vous voulez faire quelque chose de spécial avec L'échec, l'original Error qui a été lancé peut être extrait (mais pas d'une manière particulièrement propice à l'appariement des motifs), par ExecutionException#getCause()

34
répondu mseddon 2017-05-23 11:46:18

Je ne sais pas si c'est un Boxed Error , mais selon votre stactrace, le problème de racine vient de la factorie lib, de la max2Double méthode à la ligne 95 .

extrait du code source:

/**Returns both the maximum element and the second-to-max element */
  def max2ByDouble(extractor: A => Double): (A, A) = {
    val s1 = t.toSeq
    assert(s1.length > 1)   // <<<== HERE
    var best1 = Double.NegativeInfinity
    ...

il semble que votre Traversable soit vide.

2
répondu nico_ekito 2013-06-24 07:35:42