我不知道如何解决这个问题,希望您能帮助我。
在服务器端后面,我有这个:
class Baza0 implements Runnable{
anotherclass arraylist_handle = new anotherclass();
public method1(string s1){uses methods figured in arraylist_handle)
public run(){
while(true){
Socket s = s.accept();
if(s==NULL) continue;
//there I'm starting another thread that handles client connection
}
}
public static void main(){
Baza0 baza0 = new Baza0();
Thread t = new Thread(baza0);
}
}
连接的客户端通过套接字服务器功能将字符串发送到客户端处理程序。如何将此字符串从客户端处理程序发送到method1作为参数?它必须仅使用一个Baza0对象,因为ArrayList对于所有客户端都必须是公共(public)的。编辑
有人可以告诉我为什么Baza0.baza0.method1()之类的东西不起作用吗?
编辑2
看看我做了什么!
我在Baza0类中创建了一个静态变量:
static Baza0 baza1;
在主要方法中,我启动了一个Baza0对象:Baza0 baza0 = new Baza0();
在此运行之后,使baza1 = baza0的方法。现在,从客户端处理程序中,我可以通过以下方式访问方法:
Baza0.baza1.method1(param);
确实有效! :D ...不知道为什么。 最佳答案
将Baza0
引用传递给客户端处理程序线程,该引用可用于调用method1
。
public method1(string s1){
synchonized(arrayList){
//list operation
}
}
...
while(true){
Socket s = s.accept();
if(s==NULL) continue;
new Thread(
new WorkerRunnable(
clientSocket, this).start();
}
....
public class WorkerRunnable implements Runnable{
public WorkerRunnable(Socket socket,Baza0 ba){
this.socket = socket;
this.baza =ba;
}
public void run(){
...
this.ba.method1(...);
}
}