Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不同线程中访问类_Java - Fatal编程技术网

Java 在不同线程中访问类

Java 在不同线程中访问类,java,Java,我在这里建东西,我发现自己陷入了困境。先介绍一下。我正在开发一个客户机-服务器游戏。它的一个功能是聊天,玩家可以用它与其他人聊天 Player1向服务器发送消息,服务器将其转发给相应的Player2。我的问题是:如何从另一个线程访问类,以便让套接字对象将消息转发给Player2 while (listening) { try { //this is how I start a th

我在这里建东西,我发现自己陷入了困境。先介绍一下。我正在开发一个客户机-服务器游戏。它的一个功能是聊天,玩家可以用它与其他人聊天

Player1向服务器发送消息,服务器将其转发给相应的Player2。我的问题是:如何从另一个线程访问类,以便让套接字对象将消息转发给Player2


        while (listening)
        {
            try 
            {
                //this is how I start a thread for each connection
                //do I need to use identifiers or something?
                new Client(serverSocket.accept()).start();
            }
            catch(IOException A)
            {
               reportError(A.toString()); //reportError is a function of mine
            }
        }

实现这一点的方法有很多,最简单的方法是:

public void start(){
        try {
            ServerSocket ss = new ServerSocket(port);
            System.out.println("Starting server on port: " + port);
            while (serverState) {
                Socket socket = ss.accept();
                //stop server 
                if (!serverState) {
                    break;
                }

                Client handler = new Client(this, socket);
                handler.start();
            }
            //when server is stopped, close all connections

            for (Client client : clients.values()) {
                client.closeConnection();
            }

        } catch (IOException e) {
        }
    }
如果在客户端的构造函数中发送“this”,并将其设置为私有变量,则可以从run函数(其他线程)访问它