我有一个继承自SimpleSwingApplication的scala类。这个类定义了一个窗口(带有def top = new MainFrame
)并实例化了一个actor。演员的代码很简单:
class Deselectionneur extends Actor {
def act() {
while (true) {
receive {
case a:sTable => {
Thread.sleep(3000)
a.peer.changeSelection(0,0,false,false)
a.peer.changeSelection(0,0,true,false)
}
}
}
}
}
并且主类也使用“实体”,一个允许gui自定义的API(没有更难看的摇摆控件!)。
当我用鼠标离开给定的摇摆桌时,演员被召唤;然后演员被称为&取消选择表的所有行。 演员表现得非常好,但是当我启动我的程序时,每次调用actor时,都会收到以下错误消息:
org.pushingpixels.substance.api.UiThreadingViolationException:状态跟踪必须在事件调度线程上完成
您知道如何删除此错误消息吗?
答案 0 :(得分:2)
您需要将gui更新移至EDT
类似的东西(我没有编译过)
case a:sTable => {
scala.swing.Swing.onEDT {
Thread.sleep(3000) // this will stop GUI updates
a.peer.changeSelection(0,0,false,false)
a.peer.changeSelection(0,0,true,false)
}
}
有关EDT的一些背景信息,请访问:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html