Scala REPL自动退出

3

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个回答

7
正如文档中所述:

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

(即它关闭了REPL运行的JVM。)
要防止这种行为,您可以简单地使用Frame,或覆盖closeOperation方法。
以下是参考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) }
}

7

这是MainFrame类本身,加上System.exit不太符合面向对象的行为。

以下是MainFrame的全部源代码:

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

看起来很明显,当窗口关闭时,会调用System.exit,并且JVM将退出。
如果您只是在尝试时发现了这个问题,则解决方法是不要这样做!如果您想在REPL中使用框架,则可以覆盖closeOperation以不退出JVM-或者只需使用Frame(因为MainFrame的唯一附加功能是JVM退出行为)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接