我在关闭Scala摇摆框架时遇到问题。这是退出按钮的代码
val buttonExit = new Button {
text = "Exit"
action = Action("Exit") {
WorldActor.run(false)
closer
}
}
close函数定义为:
def closer (){
top.close
}
其中top是MainFrame。每次我试图关闭,它只是暂停并停止响应。
答案 0 :(得分:5)
好像你可以打电话
dispose()
框架上的。
dispose
在scala.swing.Window
上实现,因此适用于框架和对话框。
调用dispose
关闭(以可恢复的方式,使用pack
和visible = 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
。