NullPointerException ...无法弄清楚原因

时间:2012-12-12 08:02:30

标签: scala nullpointerexception

我正在尝试使用A类中的对象将每个actor的不同值分配给示例类中的变量“file”。

    class A{

  var a1=new Array[example](2) 

  def starting()= {

    for(i <- 0 to 3){

      if(i==0){
        a1(i).file="L1.txt"; 
      }
      else if(i==1){
        a1(i).file="L2.txt";
      }

      a1(i).start

    }
  }
}


class example extends Actor {

  var file="default.txt"

  var Handle = new A

  def act()= {
    loop{
      var count=0
      react{
        //remaining code
    }
  }
 }

这会抛出与行相对应的nullpointerexception:

for(i <- 0 to 3){

          if(i==0){
            a1(i).file="L1.txt"; 
          }

我是scala的初学者..我不知道怎么也找不到这个例外的原因。请帮忙。

3 个答案:

答案 0 :(得分:4)

var a1=new Array[example](2)创建具有2个空值的新数组,因此a1(i)为空。

使用var a1 = IndexedSeq.fill(2){ new example }

非主题:

此类内容有Code Review,但您的代码不是scala方式。尝试重写它。

例如:

scala> import actors.Actor._
import actors.Actor._

scala> val as = for ( fileName <- Seq("L1.txt", "L2.txt") )
     |   yield actor {
     |     var count = 0
     |     loop {
     |       receive {
     |         case t =>
     |           count += 1
     |           println(fileName + " " + count + " " + t)
     |       }
     |     }
     |   }
as: Seq[scala.actors.Actor] = List(scala.actors.Actor$$anon$1@ef82188, scala.actors.Actor$$anon$1@44616f65)

scala> as.foreach{ _ ! 's }
L2.txt 1 's
L1.txt 1 's

答案 1 :(得分:1)

除了@senia已经诊断出来之外,你正在分配一个包含2个元素的数组,然后尝试迭代它的4个元素:

for(i <- 0 to 3){

肯定会产生ArrayIndexOutOfBoundsException一次i变成2.循环条件应为for(i <- 0 to 1)for(i <- 0 until 2)才能生效。虽然确实有更好的Scala-ish方法来实现它。

答案 2 :(得分:0)

可能没有找到“L1.txt”文件!

请阅读此网址Read entire file in Scala?