java - 如何在类实例之间共享相同的变量?

标签 java class sockets networking

(更新)所以我正在运行一个服务器,并且我希望有一定数量的客户端连接,因此每次客户端连接时,在客户端类中我都会增加一个计数器,但它似乎不起作用。我正在尝试在服务器端执行此操作,但它仍然无法正常工作

 while(true){
        try{
            Socket clientSocket = serverSocket.accept();
            MortgageRunnable m = new MortgageRunnable(clientSocket);
            System.out.println("New player has connected!");
            if(!(connectedClients == maxPlayers)){
            new Thread(m).start();
            connectedClients++;}
            else{m.displayMessage("Max players connected");}

MortgageRunnable 基本上是线程,因此所有逻辑都在那里,这就是函数 displayMessage():

public void displayMessage(String message) {
    try {
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        out.println(message);
}catch(IOException e){
        e.getMessage();
    }

最佳答案

每次创建 Client 的新实例时,它都会重新初始化 numofPlayers 变量。

因此,我假设您有另一个类正在创建这些客户端实例,我们将其称为 Main...我会将计数器存储在正在生成客户端的“Main”类中。希望我正确理解您的情况。

class Main {
  public static void main(String[] args) {
    int numOfPlayers = 0;
    if (numOfPlayers < maxPlayers) {
      Client client = new Client();
      numOfPlayers++;
    }
  }
}

关于java - 如何在类实例之间共享相同的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59584775/

相关文章:

java - 主程序在读取启动另一个永远运行的进程的进程的输出流时挂起

java - 元素 'Name' 已与 @org.simpleframework.xml.Element 一起使用

java - 为什么 HashSet 不能直接在内部使用位数组而不是 HashMap 来节省一些空间?

c# - 如何从类中返回错误

c# - 私有(private)结构作为公共(public)方法的返回类型

c++ - 通过 Socket Creation/getsockname 查找本地 IP

perl - 测试文件句柄中的可用数据

java - 为什么执行AsyncTask时不需要捕获TimeoutException?

class - 快速更改类中变量的值

c - 从结构体发送数据,套接字编程