Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 无法初始化类$line10。$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$_Scala - Fatal编程技术网

Scala 无法初始化类$line10。$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$

Scala 无法初始化类$line10。$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$,scala,Scala,我以一个奇怪的问题开始我的一天。我真的看不出我的代码有什么问题。记下下面的句子 import scala.concurrent._ import scala.concurrent.duration._ import scala.util._ import scala.concurrent.ExecutionContext.Implicits.global def f2 = Future.failed(new Exception("I do nothing")) def f1 = Future

我以一个奇怪的问题开始我的一天。我真的看不出我的代码有什么问题。记下下面的句子

import scala.concurrent._
import scala.concurrent.duration._
import scala.util._
import scala.concurrent.ExecutionContext.Implicits.global

def f2 = Future.failed(new Exception("I do nothing"))
def f1 = Future { println("working"); Thread.sleep(5000); 1 }

val list = List(f2, f1)
val consolidated = Future.sequence(list)
consolidated.onComplete {
  case Success(_) => println("completed successfully")
  case Failure(e) => println(s"failed with ${e.getMessage}")
}
Await.result(consolidated, Duration.Inf)
然后在REPL中执行一个
:粘贴
。我看到一个奇怪的例外

~ > scala
Welcome to Scala 2.12.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121).
Type in expressions for evaluation. Or try :help.

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.concurrent._
import scala.concurrent.duration._
import scala.util._
import scala.concurrent.ExecutionContext.Implicits.global

def f2 = Future.failed(new Exception("no work"))
def f1 = Future { println("working"); Thread.sleep(5000); 1 }

val list = List(f2, f1)
val consolidated = Future.sequence(list)
consolidated.onComplete {
  case Success(_) => println("completed successfully")
  case Failure(e) => println(s"failed with ${e.getMessage}")
}
Await.result(consolidated, Duration.Inf)


// Exiting paste mode, now interpreting.

java.lang.NoClassDefFoundError: Could not initialize class $line3.$read$$iw$$iw$
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:140)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
java.lang.NoClassDefFoundError: Could not initialize class $line3.$read$$iw$$iw$
    at scala.runtime.java8.JFunction0$mcI$sp.apply(JFunction0$mcI$sp.java:12)
    at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:653)
    at scala.util.Success.$anonfun$map$1(Try.scala:251)
    at scala.util.Success.map(Try.scala:209)
    at scala.concurrent.Future.$anonfun$map$1(Future.scala:287)
    at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:29)
    at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:29)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:140)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
java.lang.Exception: I do nothing
  at .f2(<console>:16)
  ... 29 elided

scala>
~>scala
欢迎使用Scala 2.12.1(Java热点(TM)64位服务器虚拟机,Java 1.8.0_121)。
键入要计算的表达式。或者尝试:帮助。
scala>:粘贴
//进入粘贴模式(按ctrl-D键完成)
导入scala.concurrent_
导入scala.concurrent.duration_
导入scala.util_
导入scala.concurrent.ExecutionContext.Implicits.global
def f2=Future.failed(新异常(“无工作”))
def f1=Future{println(“working”);Thread.sleep(5000);1}
val list=列表(f2,f1)
val consolidated=未来。序列(列表)
合并。完成{
案例成功()=>println(“成功完成”)
案例失败(e)=>println(s“使用${e.getMessage}失败”)
}
等待结果(合并,持续时间.Inf)
//正在退出粘贴模式,现在正在解释。
java.lang.NoClassDefFoundError:无法初始化类$line3。$read$$iw$$iw$
在scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
在scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:140)
位于java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
位于java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
位于java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
在java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)处
java.lang.NoClassDefFoundError:无法初始化类$line3。$read$$iw$$iw$
在scala.runtime.java8.JFunction0$mcI$sp.apply(JFunction0$mcI$sp.java:12)
在scala.concurrent.Future$.$anonfun$apply$1(Future.scala:653)
在scala.util.Success.$anonfun$map$1(Try.scala:251)
在scala.util.Success.map(Try.scala:209)
在scala.concurrent.Future.anonfun$map$1(Future.scala:287)
在scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:29)
在scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:29)
在scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
在scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:140)
位于java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
位于java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
位于java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
在java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)处
异常:我什么都不做
f2时(:16)
... 29删去
斯卡拉>
我真的看不出有什么理由
无法初始化类
错误。根据我的说法,代码应该只打印“失败,没有工作”

问题是

Await.result(consolidated, Duration.Inf)
当您等待一个
Future
,而该Future失败时,将抛出它包含的异常。由于REPL的工作方式,有一个未捕获的异常会导致它的一些机器损坏。这似乎是REPL中的一个bug,但似乎还没有报告

注意,
onComplete
不会更改
未来的结果。它只是在
未来的
完成后安排要做的事情。特别是,它不会消耗
未来的
。如果您打算转换
未来
,您可以执行以下操作:

val transformed: Future[String] = consolidated.andThen {
  case Success(v) => "Completed successfully"
  case Failure(e) => s"Failed with ${e.getMessage}"
}

println(Await.result(transformed, Duration.Inf))
问题是这个

Await.result(consolidated, Duration.Inf)
当您等待一个
Future
,而该Future失败时,将抛出它包含的异常。由于REPL的工作方式,有一个未捕获的异常会导致它的一些机器损坏。这似乎是REPL中的一个bug,但似乎还没有报告

注意,
onComplete
不会更改
未来的结果。它只是在
未来的
完成后安排要做的事情。特别是,它不会消耗
未来的
。如果您打算转换
未来
,您可以执行以下操作:

val transformed: Future[String] = consolidated.andThen {
  case Success(v) => "Completed successfully"
  case Failure(e) => s"Failed with ${e.getMessage}"
}

println(Await.result(transformed, Duration.Inf))