我正在为一个应用程序制作服务器,并且我创建了一个接受用户的线程。
但似乎它没有来到我的重写方法run()
它不会给我一个错误或者它不会运行。
以下是代码:
这是客户端侦听器
package org.walking.server.listener;
import java.io.IOException;
import java.net.ServerSocket;
import javax.swing.SwingWorker;
/*
* Walking client listener!
*/
public class WalkingCL {
private SwingWorker work;
ServerSocket server;
public boolean listening = true;
public void acceptclient(){
try {
System.out.println("Created server socket");
server = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Error while creating ServerSocket on port 4444");
e.printStackTrace();
}
work = new SwingWorker<Object,Void>(){
public Object doInBackground(){
while(listening){
try {
new WalkingCLT(server.accept()).start();
} catch (IOException e) {
System.err.println("Error while making thread!");
e.printStackTrace();
}
}
return listening;
}
};
}
}
这是客户端侦听器线程:
package org.walking.server.listener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/*
* Walking Client listener Thread!
*/
public class WalkingCLT extends Thread {
private Socket client;
public WalkingCLT(Socket client){
super("Walking client listener thread!");
this.client = client;
}
@Override
public void run(){
System.out.println("HELLO?");
try {
System.out.println("User:" + client.getInetAddress() + "connected!");
PrintWriter out = new PrintWriter(client.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out.println("HELLO?");
out.flush();
out.close();
in.close();
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我已经提出了一些println声明,看看是否有这个但是我只看到了这个: 服务器堆栈跟踪:
创建服务器套接字
客户端堆栈跟踪:
面板创建! 你的连接!
希望你能帮助我。
谢谢!
答案 0 :(得分:1)
您只是创建SwingWorker任务的实例。你错过了一些帮助类对work.execute()或work.doInBackground()的调用。您需要查看ExecutorService以及如何将其用于submit and execute SwingWorker tasks。 Future documentation中还有一个小代码段。