У меня есть процесс подключения ServerSocketChannel в SwingWorker. В самом приложении Swing два JLabels должны обновляться (1) строкой (статус соединения) и (2) целым числом (количество подключенных клиентов). Ниже приведен скриншот приложения до того, как JButton «Обнаружение клиентов» запустит процесс подключения. Однако я не уверен, как опубликовать () и обработать (), чтобы обновить более одного компонента Swing в EDT. Есть ли у кого-нибудь руководство о том, как этого добиться?
Поскольку 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
}
}
process()
, но должно быть довольно просто обновить несколько компонентов. - person jtahlborn   schedule 15.09.2012