Что такое коробочная ошибка в Scala?
когда я запускаю свое приложение, браузер показывает
[ExecutionException: Boxed Error]
Он ничего не говорит о номере строки и т. д.
в консоли, у меня есть следующие
! @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]
2 ответов
"Boxed Error" - это ответ Scala на Error
быть брошенным в Future
. В Java и, следовательно, Scala подклассы типа Error
имеют особое значение как фатальная ошибки. См.различия между исключением и ошибкой. Короче говоря, javadoc говорит:
ошибка-это подкласс Throwable, который указывает на серьезные проблемы что разумное приложение не должно пытаться поймать. Большинство таких ошибки ненормальны условия.
в отличие от бросания других Throwable
s в будущем, когда подкласс Error
выбрасывается, по умолчанию Scala resolver обернет Error
на java.util.concurrent.ExecutionException
, со строкой сообщения "Boxed Error" и завершите свое обещание с ошибкой.
процитировать фьючерсную документацию http://docs.scala-lang.org/overviews/core/futures.html w.r.т. Error
перебрасываясь:
[ошибка] исключения перестраиваются в потоке, выполняющем сбой асинхронное вычисление. Обоснованием этого является предотвращение распространение критических исключений и исключений, связанных с регулированием потока, как правило не обрабатывается клиентским кодом и одновременно информирует клиента в каком будущем вычисление провалилось.
если вы хотите сделать что-то особенное с провалом, оригинал Error
то, что было брошено, может быть извлечено (но не особенно поддается сопоставлению шаблонов), ExecutionException#getCause()
Я не знаю, что это Boxed Error
, но согласно вашему stacktrace, корневая проблема исходит из factorie
lib, из max2Double
метод в строке 95.
извлечение из исходного кода:
/**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
...
кажется, что ваш Traversable
пусто.