Scala REPL自动退出

时间:2011-09-06 14:11:26

标签: scala read-eval-print-loop

Scala REPL表现得很奇怪,或者这可能是预期的行为。当我创建MainFrame对象并将其可见性设置为true时,将显示一个窗口。但是,如果我关闭窗口,Scala REPL将退出终端。示例会话:

 ~$ scala
 scala> import swing._
 scala> val frame = new MainFrame()
 scala> frame.visible = true
 ~$                             //when I close the window

我在kubuntu上使用scala 2.9.1

2 个答案:

答案 0 :(得分:7)

正如the documentation中所述:

  

关闭框架并在关闭时退出应用程序。

(即,它关闭了REPL运行的JVM。)

要防止出现这种情况,您可以改为使用Frame,或覆盖closeOperation方法。

以下是source for MainFrame.scala供参考:

/**
 * A frame that can be used for main application windows. Shuts down the
 * framework and quits the application when closed.
 */
class MainFrame extends Frame {
  override def closeOperation() { sys.exit(0) }
}

答案 1 :(得分:7)

这是MainFrame类本身,再加上System.exit的非OO行为。

这是MainFrame的完整来源:

class MainFrame extends Frame {
  override def closeOperation() { sys.exit(0) }
}

看着这一点,很明显当窗口关闭时,System.exit被调用,JVM将退出。

如果您只是在发现这个时进行实验,那么解决方法就是不要这样做!如果要在REPL中使用帧,则可以覆盖closeOperation以不退出JVM - 或者只使用Frame(因为MainFrame的唯一附加功能是JVM退出行为)