Scala REPL自动退出

Jam*_*mil 3 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
Run Code Online (Sandbox Code Playgroud)

我在kubuntu上使用scala 2.9.1

aio*_*obe 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) }
}
Run Code Online (Sandbox Code Playgroud)


And*_*yle 7

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

这是以下内容的完整来源MainFrame:

class MainFrame extends Frame {
  override def closeOperation() { sys.exit(0) }
}
Run Code Online (Sandbox Code Playgroud)

看一下,很明显当窗口关闭时,System.exit会调用JVM并退出.

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