SimpleSwingApplication创建了一个看似无限量的相同窗口

时间:2016-06-22 04:47:14

标签: swing scala scala-swing

所以我在scala中有以下简单程序:

object CViewerMainWindow extends SimpleSwingApplication {
    var i = 0
    def top = new MainFrame {
        title = "Hello, World!"
        preferredSize = new Dimension(320, 240)
        // maximize
        visible = true
        contents = new Label("Here is the contents!")
        listenTo(top)
        reactions += {
            case UIElementResized(source) => println(source.size)

    }
}

object CViewer {
  def main(args: Array[String]): Unit = {
    val coreWindow = CViewerMainWindow
    coreWindow.top
  }
}

我原本希望它会创建一个普通的窗口。相反,我得到了这个:

enter image description here

1 个答案:

答案 0 :(得分:2)

您正在创建一个无限循环:

def top = new MainFrame {
  listenTo(top)
}

也就是说,top正在调用top正在调用top ...以下内容应该有效:

def top = new MainFrame {
  listenTo(this)
}

但更好更安全的做法是禁止主框架多次实例化:

lazy val top = new MainFrame {
  listenTo(this)
}