Кажется, что метод потока не запускается. (Переопределите метод run ()) - PullRequest
1 голос
/ 26 декабря 2011

я создаю сервер для приложения, и я создал поток для принятия пользователя.

, но, похоже, это не относится к моему переопределенному методу 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();
    }

}

}

Я поставил некоторые распечатки отчетов, чтобы посмотреть, доходит ли это, но я вижу только это: Отслеживание стека сервера:

Создание сокета сервера

Трассировка стека клиентов:

Панель создана!Ваш подключен!

Надеюсь, вы сможете мне помочь.

Спасибо!

1 Ответ

1 голос
/ 26 декабря 2011

Вы только создаете экземпляр задачи SwingWorker.Вы пропускаете вызов work.execute () или work.doInBackground () некоторым вспомогательным классом.Вам нужно взглянуть на ExecutorService и как его использовать для отправки и выполнения задач SwingWorker .В документации Future .

есть небольшой фрагмент кода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...