【问题标题】:Scala REPL exiting automaticallyScala REPL 自动退出
【发布时间】:2011-09-06 14:11:25
【问题描述】:

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

【问题讨论】:

    标签: scala read-eval-print-loop


    【解决方案1】:

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

    这是MainFrame的全部来源:

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

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

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

    【讨论】:

      【解决方案2】:

      正如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) }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多