java - 线程方法似乎没有运行。(重写run()方法)

标签 java networking

我正在为应用程序创建服务器,并且我创建了一个用于接受用户的线程。

但它似乎没有出现在我重写的方法 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 语句来查看是否涉及到这一点,但我只看到了这个: 服务器堆栈跟踪:

Created server socket

客户端堆栈跟踪:

Panel Created! Your connected!

希望你能帮助我。

谢谢!

最佳答案

您只是创建 SwingWorker 任务的一个实例。您缺少某些帮助程序类对 work.execute() 或 work.doInBackground() 的调用。您需要查看 ExecutorService 以及如何使用它来submit and execute SwingWorker tasksFuture documentation 中还有一个小代码片段.

关于java - 线程方法似乎没有运行。(重写run()方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636788/

相关文章:

java - session 作用域 bean 不是由 DispatcherServlet 创建的

java - 试图调用子方法,但将其实例化为父方法

networking - 我需要 IP 地址吗?

ubuntu - Mininet OVS-Controller无法加载运行

networking - 使用 libnetfilter_queue 即时重写网络数据包

networking - 如何更改 Docker 默认子网大小?

java - Switch 语句中的枚举无法解析

java - java游戏开发中的窗口崩溃

java - 防止覆盖 bean 的 bean 定义

qt - 使用 Qt 4.4 验证网络连接