【发布时间】:2012-09-16 01:25:23
【问题描述】:
我在 SwingWorker 中有一个 ServerSocketChannel 连接进程。在 Swing 应用程序本身中,两个 JLabel 应该更新为 (1) 字符串(连接状态)和 (2) 整数(连接的客户端数)。下面是“检测客户端”JButton 运行连接过程之前应用程序的屏幕截图。但是,我不确定如何发布()和处理(),以便在 EDT 上更新多个 Swing 组件。有没有人指导如何实现这一目标?
因为List<V>是process()的参数,所以我试了<Object>为<V>。但是,这似乎遇到了从字符串/整数到对象的转换问题,反之亦然。
下面的演示代码说明了应该发布更新的几点:
protected Void doInBackground() {
try {
// Omitted: obtain selector
ServerSocketChannel ssc = ServerSocketChannel.open() // could fail, may need
// to publish status
ssc.socket().bind(serverAddress); // could fail, may need to publish status
ssc.configureBlocking(false); // could fail, may need to publish status
// Omitted: register ssc
while (true) {
int count = sel.select(1000); // may need to publish for # of clients
// Omitted: rest of processing
}
} catch (IOException e) {
//handle error
}
}
【问题讨论】:
-
您是否尝试按照 SwingWorker javadoc 中的示例进行操作?这很简单。该示例更新了
process()方法中的一个组件,但更新多个组件应该非常简单。 -
@jtahlborn 我确实采用了 javadoc 中的示例。我一直遇到转换问题,并且错误表明我的 process() 没有覆盖超类版本。越来越混乱了……
标签: java multithreading swingworker