Java Eclipse多次运行GUI客户端

Java Eclipse多次运行GUI客户端,java,eclipse,swing,user-interface,Java,Eclipse,Swing,User Interface,我正在编写客户机/服务器游戏。我正在使用Eclipse。客户端通过Swing使用GUI。到目前为止,我只运行了一次服务器,然后运行了客户端,右键单击类-->运行方式。一切都很好。现在我需要运行客户端类两次。我尝试在服务器和客户端运行时,再次右键单击客户端->运行方式。有两个客户端进程,但只有一个GUI JFrame 我想用这种方式测试它,运行服务器,运行客户端,运行客户端,这样两个客户端都在运行,然后在第一个客户端上我想点击第一个按钮(这是新游戏),在第二个客户端上我想点击第二个按钮(它是现有的

我正在编写客户机/服务器游戏。我正在使用Eclipse。客户端通过Swing使用GUI。到目前为止,我只运行了一次服务器,然后运行了客户端,右键单击类-->运行方式。一切都很好。现在我需要运行客户端类两次。我尝试在服务器和客户端运行时,再次右键单击客户端->运行方式。有两个客户端进程,但只有一个GUI JFrame

我想用这种方式测试它,运行服务器,运行客户端,运行客户端,这样两个客户端都在运行,然后在第一个客户端上我想点击第一个按钮(这是新游戏),在第二个客户端上我想点击第二个按钮(它是现有的游戏连接),但对我来说,它无法为两个客户端进程运行两个GUI。我只有第一个客户端的第一个GUI,然后只有第二个客户端的运行进程(没有GUI)

多谢各位

马雷克

编辑:

主服务器

public static void main(String [] argv) throws IOException,ClassNotFoundException {
    ServerListen server = new ServerListen(PORT);
    server.acceptConnection();
}
SERVER-acceptConnection()

这只运行一次

主客户端

public static void main(String [] argv) throws IOException, ClassNotFoundException {
    Client client = new Client(PORT);
    final Basic frame = new Basic(client);
    frame.setVisible(true);
}
附言-你看到了打印的!!!联系当我第二次右键单击-->在客户端上运行时,没有第二次!!!联系信息

多谢各位

编辑2

public Client(int PORT)
{
    try{
        this.clientSocket = new Socket(serverName, PORT);
        sendMessage = new ObjectOutputStream(clientSocket.getOutputStream());
        sendMessage.flush();
        getMessage = new ObjectInputStream(clientSocket.getInputStream());
    }

这是代码的一部分,在第二个客户端中,它冻结在getMessage line上。

您需要运行任何长时间运行的代码位,例如您的
,而(true)
在后台线程中循环,否则您可能会占用Swing事件线程,冻结应用程序

例如,您的代码可能看起来像:

// implement Runnable so it can be run in a background thread
public class MultiServer2 implements Runnable {
   public static final int PORT_NUMBER = 2222;
   private static final int THREAD_POOL_COUNT = 20;
   private List<MultiClientHandler> clientList = new ArrayList<>();
   private ServerSocket serverSocket;
   private ExecutorService clientExecutor = Executors.newFixedThreadPool(THREAD_POOL_COUNT);

   public MultiServer2() throws IOException {
      serverSocket = new ServerSocket(PORT_NUMBER);
   }

   @Override
   public void run() {
      // do this in the run method so that it runs in a background thread
      while (true) {
         try {
            Socket clientSocket = serverSocket.accept();

            // MultiClient2 also implements Runnable
            MultiClientHandler client = new MultiClientHandler(clientSocket);
            clientList.add(client);

            // and each socket's code needs to be run in its own thread
            clientExecutor.execute(client);
         } catch (IOException e) {
            // TODO notify someone of problem!
            e.printStackTrace();
         }
      }
   }
public static void main(String[] args) {
  try {
     MultiServer2 multiServer = new MultiServer2();
     new Thread(multiServer).start();  // this runs the runnable
  } catch (IOException e) {
     e.printStackTrace();
  }
}

Eclipse不会阻止多个GUI进程同时运行。当您运行客户端并且另一个客户端已经连接时,问题更可能出现在代码中。您的服务器是否正确处理多个传入连接?@schmop。我会编辑这篇文章,你会看到代码,它没有什么不应该工作的,它作为控制台程序工作,现在我只添加GUI并想测试它是的,这正是我所说的:问题不是多个GUI,而是多个服务器连接。在
客户机=新客户机(端口)之前放置跟踪如果您需要说服自己该流程不止一次启动。
“您将看到代码,它没有任何不应该工作的原因……”
——认真地说。在你弄清楚为什么会有一个bug之前,你首先要做的就是摆脱所有的假设,比如这个愚蠢的假设。@schmop,你是对的,谢谢。这是我的客户端构造函数,我不知道哪里出错了,我使用了调试器,但他只给我显示了冻结的行。这是一条信息线。你能帮我吗?
public static void main(String[] args) {
  try {
     MultiServer2 multiServer = new MultiServer2();
     new Thread(multiServer).start();  // this runs the runnable
  } catch (IOException e) {
     e.printStackTrace();
  }
}