Scala REPL выходит автоматически - PullRequest
3 голосов
/ 06 сентября 2011

Scala REPL ведет себя странно или, возможно, это ожидаемое поведение.Когда я создаю объект MainFrame и устанавливаю его видимость true, отображается окно.Однако, если я закрою окно, Scala REPL выйдет в терминал.Пример сеанса:

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

Я использую Scala 2.9.1 на Kubuntu

Ответы [ 2 ]

7 голосов
/ 06 сентября 2011

Это сам класс MainFrame, в сочетании с поведением не очень-OO System.exit.

Это весь источник MainFrame:

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

Глядя на это, довольно ясно, что когда окно закрыто, вызывается System.exit и JVM завершает работу.

Если вы только экспериментировали, когда обнаружили это, то обходной путь - просто не делать этого!Если вы хотите использовать фрейм в REPL, вы можете либо переопределить closeOperation, чтобы не выходить из JVM, либо просто использовать Frame (поскольку единственной дополнительной функциональностью в MainFrame является поведение выхода из JVM).

7 голосов
/ 06 сентября 2011

Как сказано в документации :

Завершение работы платформы и закрытие приложения при закрытии.

(То есть он отключает JVM, в которой работает REPL.)

Чтобы предотвратить это, вы можете либо просто использовать 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) }
}
...