1

我有一个继承自 SimpleSwingApplication 的 scala 类。这个类定义了一个窗口(带有def top = new MainFrame)并实例化了一个演员。演员的代码很简单:

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)
            }
        }
    }
}

}

并且主类也使用“substance”,一个允许 gui 自定义的 API(没有更多丑陋的摇摆控件!)。

当我用鼠标离开给定的秋千桌时,演员被调用;然后调用actor并取消选择表的所有行。演员表现得很好,但是当我启动我的程序时,每次调用演员时,我都会收到以下错误消息:

org.pushingpixels.substance.api.UiThreadingViolationException:必须在事件调度线程上进行状态跟踪

你知道我怎样才能删除这个错误信息吗?

4

1 回答 1

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

于 2013-12-16T13:46:54.813 回答