Java 使用SwingWorker实现UDP客户机/服务器
正在尝试使用Swing编写UDP客户端服务器应用程序。客户端的每个实例都应该能够(从事件调度线程)向服务器发送消息,并且还可以连续侦听通过服务器转发的其他客户端的消息(在使用SwingWorker的工作线程上)。我现在正在尝试实现一个ListenWorker类,它的doInBackground方法将持续侦听UDP数据报,并将数据发布到process()方法,同时将使用消息更新客户端JFrame上的JTextArea。然而,由于缺乏SwingWorker和一般Swing并发性方面的经验,我遇到了一些困难。以下是我到目前为止编写的代码的要点:Java 使用SwingWorker实现UDP客户机/服务器,java,swing,concurrency,swingworker,Java,Swing,Concurrency,Swingworker,正在尝试使用Swing编写UDP客户端服务器应用程序。客户端的每个实例都应该能够(从事件调度线程)向服务器发送消息,并且还可以连续侦听通过服务器转发的其他客户端的消息(在使用SwingWorker的工作线程上)。我现在正在尝试实现一个ListenWorker类,它的doInBackground方法将持续侦听UDP数据报,并将数据发布到process()方法,同时将使用消息更新客户端JFrame上的JTextArea。然而,由于缺乏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);
}
}
}
公共类ListenWorker扩展SwingWorker{
public ListenWorker(int端口,JTextArea textArea){
//安装插座
}
受保护的void doInBackground(){
while(true){
//接收数据报的代码
发布(messageFromDatagram);
}
}
受保护的无效进程(列出消息){
用于(字符串消息:消息){
textArea.append(消息);
}
}
}
然而,我的IDE在我开始类定义的第一行给了我一个错误,说“非法开始类型”,因为在那里无效。就我所见,我希望我的doInBackground是一个void方法,因为我希望它无限期地运行,监听来自不同客户端的数据报。Java似乎不想让我把它作为一个无效的方法。我该如何编写代码来解决这个问题?您可能希望表示doInBackground()
返回类型;例如SwingWorker
附录:
doInBackground()
将返回null
现在尝试,将doInBackground的返回类型更改为Void,但我究竟返回什么?我尝试了return void和return void,但是在这两个函数上都出现了错误,添加了return null,编译器错误消失了,谢谢。