Main class 不会自动创建客户端

Main class will not create client's automatically

我正在创建一个顶级王牌游戏,我在其中创建了一个服务器和两个客户端。我有一个控制器 class,我想用它来控制游戏。当我 运行 控制器创建我的服务器时,但我必须 运行 客户端分开才能创建它们。

有没有一种方法可以在我 运行 控制器启动我的客户端和服务器时启动它?我是 java 中 client/server 的初学者,所以任何帮助都会很棒。

        public static void main(String[] args) throws ClassNotFoundException, IOException {

        //Empty card arrays for now while testing
        Cards[] Player1 = new Cards[2];
        Cards[] Player2 = new Cards[2];

        Server server = new Server();

        Client client = new Client(Player1, "Gary");
        Client client2 = new Client(Player2, "Jack");
    }
}



 public class Server {


    public Server() throws IOException, ClassNotFoundException{
        @SuppressWarnings("resource")
        ServerSocket serverSocket = new ServerSocket(3000);
        System.out.println("Connecting....");

        while(!serverSocket.isClosed()) {
            Socket socket = serverSocket.accept();
            System.out.println("Connected");
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //Reads my card object
            Cards card = (Cards)ois.readObject();

            JFrame frame = new JFrame();
            frame.setSize(600, 600);
            //Test
            JLabel imageLabel = new JLabel(card.image); 
            frame.add(imageLabel);
            frame.setVisible(true);
            System.out.println(card.name);
            ois.close();
            socket.close();         

        }
    }
}



 public class Client implements Serializable{   


    public Client(Cards[] hand, String string) throws IOException, ClassNotFoundException {
        Socket socket = new Socket("localhost", 3000);
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        //This is a test to show my card object can be passed over the stream
        Cards card = new Cards(string, 9, 5, 3, 5,new ImageIcon("C:\Users\gary.kelly\Pictures\Cards\John Snow.jpg"));  
        oos.writeObject(card);   
        oos.close();
        socket.close();       
    }   
}

您的程序现在是单线程的,服务器的 accept 方法阻塞了主线程,因此客户端无法连接。您可以在不同的线程中启动服务器和客户端,以便 运行 它们在一个 java 进程中一起运行。

    new Thread(() -> new Server()).start();
    new Thread(() -> new Client(Player1, "Gary")).start();
    new Thread(() -> new Client(Player2, "Jack")).start();