Использование SwingWorker для реализации UDP Клиент / Сервер - PullRequest
1 голос
/ 02 ноября 2011

Попытка написать приложение клиент-сервер UDP с использованием Swing. Каждый экземпляр клиента должен иметь возможность отправлять сообщения на сервер (из потока рассылки событий), а также постоянно прослушивать сообщения от других клиентов, ретранслируемых через сервер (в рабочем потоке с использованием SwingWorker). Я пытаюсь реализовать класс ListenWorker, чей метод doInBackground будет непрерывно прослушивать UDP-дейтаграммы и публиковать данные в методе process (), с обновлением JTextArea на клиентском JFrame с сообщением. Тем не менее, я сталкиваюсь с некоторыми трудностями из-за моей неопытности в SwingWorker и общего параллелизма Swing. Вот суть кода, который я написал до сих пор:

public class ListenWorker extends SwingWorker<void, String> {

    public ListenWorker(int port, JTextArea textArea){
        // set up socket
    }

    protected void doInBackground(){
        while(true){
            // code to receive Datagram
            publish(messageFromDatagram);
        }
    }

    protected void process(List<String> messages){
        for(String message : messages){
            textArea.append(message);
        }
    }
}

Тем не менее, моя IDE выдает ошибку в первой строке, где я начинаю определение класса, говоря "недопустимое начало типа" из-за отсутствия там. Насколько я вижу, я хочу, чтобы мой doInBackground был пустым методом, поскольку я намерен запускать его бесконечно долго, слушая дейтаграммы от различных клиентов. Java, похоже, не хочет, чтобы я использовал его как пустой метод. Как бы я обойти это?

1 Ответ

2 голосов
/ 02 ноября 2011

Вероятно, вы хотите, чтобы java.lang.Void представлял тип возврата doInBackground();например SwingWorker<Void, String>.

Приложение: doInBackground() будет return null.

...