2013-06-23 18 views
28

benim uygulamayı çalıştırmak, tarayıcı vb konsolundaScala'da Kutulu Bir Hata Nedir?

,

[ExecutionException: Boxed Error] 

Satır sayısı hakkında hiçbir şey söylemez gösterir, şu var

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

play.api.Application$$anon$1: 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$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) [play_2.10.jar:2.1.1] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) [play_2.10.jar:2.1.1] 
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1] 
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.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$2.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$3.apply(Trainer.scala:72) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] 
    at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples$3.apply(Trainer.scala:63) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] 

cevap

31

"Kutulu Hatası", Scala'nın bir Error yanıtının Future içine atılmasıdır. Java'da ve dolayısıyla, Scala, tip Error alt sınıflarının, Fatal hataları gibi özel bir anlamı vardır. Bkz Differences between Exception and Error. Kısacası, javadoc diyor:

Bir hata ciddi sorunlara işaret makul uygulama yakalamaya çalışın gerektiğini Throwable bir alt sınıfıdır. Çoğu hataları, anormal koşullardır.

bir gelecek içinde diğer Throwable s atma aksine, Error bir alt sınıfı atıldığında, varsayılan Scala çözümleyici mesajı dizesi "Aralıklı Hata" ile, bir java.util.concurrent.ExecutionException içinde Error tamamlamayı ve birlikte Sözünü tamamlayacak başarısızlık.

Futures belgelerini alıntılamak için http://docs.scala-lang.org/overviews/core/futures.html w.r.t. Error atılan:

[Hata] istisnalar başarısız asenkron hesaplamasını uygularken dizisindeki rethrown edilir. Bunun ardındaki mantık, 'un kritik ve kontrol akışına ilişkin istisnaların normal olarak müşteri kodu tarafından ele alınmaması ve aynı zamanda gelecekteki hesaplamanın başarısız olduğu müşteriye bildirilmesidir. Eğer yetmezliği ile özel bir şey yapmak istiyorsanız

, atıldı orijinal Error çıkarılabilir (ancak desen eşleştirme özellikle uygun bir yönde değil) ExecutionException#getCause()

+0

tarafından, sanki niye eksik İlk etapta Gelecek'den atılabilir bir şey "sızıyor", orijinal AssertionError'ın yeni yakalanmaması ve geleceğin eksik geri bildiriminin bir Failure (eski) mi geçmesi gerekiyor? – lisak

+1

Gelecekte NonFatal istisnasının ele alındığını görüyorum, ancak AssertionError aslında bir NonFatal istisnasıdır, bu yüzden yakalanmalı ve bir değer olarak geçirilmelidir – lisak

2

Bu bir Boxed Error olduğunu bilmiyorum, ancak sizin stacktrace göre, kök sorunu max2Doublemethod at line 95factorie lib gelir. kaynak kodundan

Özü:

/**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 
    ... 

sizin Traversable boş olduğu görülmektedir.