简体   繁体   English

线程方法似乎无法运行。(重写run()方法)

[英]Thread method doesn't seem to run.(Override the run() method)

im making a server for an application, and I made a thread for accepting user's. 即时通讯为应用程序制作服务器,并且我制作了一个用于接受用户的线程。

but it seems that it doesn't come to my overrided method run() 但是似乎它没有出现在我的重写方法run()中

it doesn't give me an error or such it just doesn't run. 它不会给我一个错误,或者就是这样它不会运行。

Here is the code: 这是代码:

This is the Client listener 这是客户端侦听器

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;

    }
   };
 }
}

Here is the client listener thread: 这是客户端侦听器线程:

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();
    }

}

}

I've put some println statments to see if it comes to that but I only see this: Server stacktrace: 我已经添加了一些println语句来查看是否涉及到该语句,但是我只能看到以下内容:Server stacktrace:

Created server socket 创建服务器套接字

Client stacktrace: 客户端堆栈跟踪:

Panel Created! 面板创建! Your connected! 您已连接!

Hope you can help me. 希望您能够帮助我。

Thanks! 谢谢!

You are only creating an instance of the SwingWorker task. 您仅在创建SwingWorker任务的实例。 You are missing a call to work.execute() or work.doInBackground() by some helper class. 您缺少某些帮助程序类对work.execute()或work.doInBackground()的调用。 You need to look at the ExecutorService and how to use it to submit and execute SwingWorker tasks . 您需要查看ExecutorService以及如何使用它来提交和执行SwingWorker任务 There is also a small code snippet in the Future documentation . Future文档中还有一个小代码段。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM