2011-12-15 56 views
2

我在关闭我的斯卡拉秋千架时出现问题。下面是我的退出按钮关闭斯卡拉秋千架

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

的代码越接近函数定义为:

def closer(){ 
    top.close 
} 

,其中顶部是大型机上。每次我尝试关闭时,它都会暂停并停止响应。

+0

“WorldActor”是scala“Actor”吗? – 2011-12-15 21:18:40

回答

5

好像你可以拨打

dispose() 
的框架

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

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

要在调用System.exit之前调用任何关闭代码的任何Frame调用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

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

我觉得

WorldActor.run(false) 

暂停程序,请尝试删除,也尝试添加System.exit(0)

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

或者可能在top.close之后放System.exit(0)

另外,你有没有设置默认关闭操作什么都不做?

peer.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE) 
+0

在哪里以及如何设置clasa中的默认关闭操作。你知道吗? – 2011-12-15 19:02:27

0

我不擅长scala.swing._但我认为以下几点:

,其中顶部是大型机
如何定义主机?

如果定义为:

def top = new MainFrame { ... } 

以下代码:

val a = top 
val b = top 

产生两个不同的实例。

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