Socket的客户端,方法receive用于接收数据,方法send用于发送数据.
class client{
 void receive{...}
 void send{...}
}类A调用client的receive方法,不间断地接收数据.
class A{
 void main(String[] args){
 client cli=new client();
 cli.receive();
 }
}现在另一个类B要使用client的send方法,如果使用new client()的话,则socket连接就会中断.
我试过client的方法用static,但是运行时有异常NullPointerException
如何调用正在运行的类client的方法呢?非常急啊!
谢谢各位大虾! 

解决方案 »

  1.   

    将client cli=new client();声明为全局实例变量,并加上static关键字.
    class A{
     public static client cli=new client();
     void main(String[] args){
     
     cli.receive();
     }
    }
    或者:
    class client{
     public static client ct = null; //建立它本身,用this赋给它
     client(){
        ct = this;
     }
     void receive{...}
     void send{...}
     public static client getInstance(){
        return ct;
     }}
    //在别的类中就可以直接调用运行的client
    .........
       client.getInstance().receive();
    ............
      

  2.   

    你的需求很奇怪!
    ---------------------------------
    将类client 定义为单态模式,在类A 和B中就可以使用了,但是client类就只能有一个了!~
      

  3.   

    lllllllllluoyi(罗毅) 我现在A,B,C类是分三次用JAVAC命令运行的,
    例如先运行C,再用JAVAC命令运行A和B,
    我按你上面的办法做了,还是空指针异常:NullPointException
      

  4.   

    你的概念有错啊!Sever用于服务器端应该是一个多线程的程序,每当一个Client呼叫的时候应该启动一个线程,把连接封装到线程中,然后把线程存入类似Vector的数据结构中,这样不论是A、B或是C发送的数据,都由它们各自相应的服务线程完成接收,也不会发生连接中断的问题;并且不提倡你使用静态变量,个人认为应该是全动态的
      

  5.   

    socket的服务器端只给一条线程进行通讯,
    问题就是在这里,
    要在开了这条线程后,只能用这条线程发送和接收数据.