Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 如何使多个客户端可以访问服务器ArrayList?_Java_Sockets_Arraylist - Fatal编程技术网

Java 如何使多个客户端可以访问服务器ArrayList?

Java 如何使多个客户端可以访问服务器ArrayList?,java,sockets,arraylist,Java,Sockets,Arraylist,我有一个简单的arraylist,并在我的服务器中创建了一些方法来添加打印编辑或从中删除内容,如果我只需要启动服务器并在该端口号与我的客户端连接就可以了 但是如果我打开另一个客户机并连接到它,然后将第一个客户机中的元素添加到arraylist中,第二个客户机上的arraylist就好像仍然是空的一样。我如何使arraylist可以被这两个用户访问?如果我从客户端1向arraylist添加了一个新项目,那么当我在客户端2中打印arraylist时,我希望能够看到该项目 一些额外的细节: 我正在为每

我有一个简单的arraylist,并在我的服务器中创建了一些方法来添加打印编辑或从中删除内容,如果我只需要启动服务器并在该端口号与我的客户端连接就可以了

但是如果我打开另一个客户机并连接到它,然后将第一个客户机中的元素添加到arraylist中,第二个客户机上的arraylist就好像仍然是空的一样。我如何使arraylist可以被这两个用户访问?如果我从客户端1向arraylist添加了一个新项目,那么当我在客户端2中打印arraylist时,我希望能够看到该项目

一些额外的细节: 我正在为每个客户端使用Collections.synchronizedList和一个线程,从arraylist中添加、打印、删除等内容的方法具有“public synchronized void”,如果这很重要的话

ArrayList初始化:

public List<Data> database = Collections.synchronizedList(new ArrayList<Data>());
public List database=Collections.synchronizedList(new ArrayList());

这是因为您使用的是实例范围。在全班范围内使用,事情应该是可行的。只需将关键工作
静态
添加到数据库声明:

public static List<Data> database = Collections.synchronizedList(new ArrayList<Data>());
publicstaticlist数据库=Collections.synchronizedList(newarraylist());

现在看来,您的每个客户机都有自己的ArrayList实例。您可以通过将其设置为应用程序范围(如静态)来解决此问题,但我猜您可能希望在程序停止后保存结果。简单的方法是将结果保存到文件中,比如在“获取”时加载列表,在“提交”时加载当前列表并保存更改,等等。不过,我建议您熟悉SQL数据库。

分享一些代码!我认为当您想要使用类范围的变量时,您正在使用某种实例范围的变量。不过,我还是需要看一些代码。我不确定我的代码的哪些部分是相关的?我添加了ArrayList初始化和我的客户机类,其中是您正在使用的
数据库
部分,以及您正在创建
客户机实例的部分
?创建客户机是我刚才添加的主要方法,现在我看到它可能与“客户机c=new Server().新客户机(连接);”有关?似乎这就是问题所在,它现在适用于多个客户端!上帝保佑你,非常感谢你!!