关闭Scala摇摆框架

时间:2011-12-15 18:34:13

标签: scala action scala-swing

我在关闭Scala摇摆框架时遇到问题。这是退出按钮的代码

val buttonExit = new Button {
  text = "Exit"
  action = Action("Exit") {
    WorldActor.run(false)
    closer
  }
}

close函数定义为:

def closer (){
  top.close
}

其中top是MainFrame。每次我试图关闭,它只是暂停并停止响应。

3 个答案:

答案 0 :(得分:5)

好像你可以打电话

dispose() 
框架上的

disposescala.swing.Window上实现,因此适用于框架和对话框。

调用dispose关闭(以可恢复的方式,使用packvisible = true重新打开)其他帧并终止应用程序(如果在最后一帧上调用)。

在任何调用System.exit之前调用任何关闭代码的帧调用quit()上终止应用程序。

这是一个快速的黑客来说明

import swing._

object SwingThing extends SimpleSwingApplication {
  def top = new MainFrame {frame =>
    val sf = new Frame {secondFrame =>
      title   = "Secondary Frame"
      visible = true
      contents = new FlowPanel {
        contents += new Button(Action("Close Me") {secondFrame.dispose()})
        contents += new Button(Action("Exit")     {quit()})
      }
    }
    val recoverBtn = new Button(Action("Recover")  {sf.pack(); sf.visible = true})
    val closeBtn   = new Button(Action("Close Me") {frame.dispose()})
    val exitBtn    = new Button(Action("Exit")     {quit()})

    contents = new FlowPanel {
      contents += recoverBtn
      contents += closeBtn
      contents += exitBtn
    }
  }
}

答案 1 :(得分:1)

我不是Scala的专家,但我做了一些Java swing开发。尝试使用

我认为

WorldActor.run(false)

暂停程序,尝试删除该程序,同时尝试添加System.exit(0)

def closer(){
    exit(0) //Java's System.exit(0) ?
}

或者可以在System.exit(0)之后加top.close

另外,您是否将默认关闭操作设置为什么都不做?

peer.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE)

答案 2 :(得分:0)

我不熟悉scala.swing._,但我认为如下:

  

其中top是MainFrame
  如何定义MainFrame?

如果您定义为:

def top = new MainFrame { ... }

以下代码:

val a = top
val b = top

生成两个不同的实例。

因此b.close未关闭a 反之亦然,即a.close未关闭b