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
答案 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退出行为)