我在 SwingWorker 中有一个 ServerSocketChannel 连接进程。在 Swing 应用程序本身中,两个 JLabel 应该更新为 (1) 字符串(连接状态)和 (2) 整数(连接的客户端数)。下面是“检测客户端”JButton 运行连接过程之前应用程序的屏幕截图。但是,我不确定如何发布()和处理(),以便在 EDT 上更新多个 Swing 组件。有人对如何实现这一目标有指导吗?
因为List<V>
是 process() 的参数,所以我试<Object>
了 as <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
}
}