1、一个线程开的socket。在其他线程里 怎么访问?。
new Runnable(){
             public void run()
             {........................
                          if( mPrintWriterClient!=null)
                { mPrintWriterClient.print(ComMsg);    
                  mPrintWriterClient.flush();
                  DataChanged = 0;
                }
                else{;}
            }}
               };//这个PrintWriter mPrintWriterClient 永远为空
报 runtime error 输出流空指针异常。怎么办,求指教。。谢谢~~~2.一个线程开的socket。在实现重力感应的接口里不能 访问 socket。也是输出量 空指针异常。
class   ?????   implements SensorEventListener
 {    public void onSensorChanged(SensorEvent event) {//这个方法里不能访问socket
                            ............
                             mPrintWriterClient.print(ComMsg);    
                          mPrintWriterClient.flush();
                            .........
                                     }
     这两句都 抛 mPrintWriterClient 空指针异常,得不到,我那些 变量 全部都是 activity的成员变量。
           非常感谢~~~

解决方案 »

  1.   

    你确定在访问线程开启之前,socket连接上了吗?mPrintWriterClient赋值了吗?
      

  2.   

    1. 请问 如果一个线程new 的socket 能被 其他线程访问么?2. 问题就应该在初始化 那里。。也就是 new socket线程还没有建立,其他线程或者重力感应接口 就已经初始化了,那个时候 怎么控制这个 互斥?
    谢谢~~
      

  3.   

    应该是线程同步的问题吧。 new Runnable(){
                 public void run()
                 {
    ........................
                              if( mPrintWriterClient!=null)
                     { mPrintWriterClient.print(ComMsg);     
                       mPrintWriterClient.flush();
                       DataChanged = 0;
                     }
                     else{;}
                }}
                   };/
      

  4.   

    应该是线程同步的问题吧。 new Runnable(){
                 public void run()
                 {
                 synchronized(mPrintWriterClient){
                   mPrintWriterClient.wait()
    ........................
                              if( mPrintWriterClient!=null)
                     { mPrintWriterClient.print(ComMsg);     
                       mPrintWriterClient.flush();
                       DataChanged = 0;
                     }
                     else{;}
                }}
                }
                   };      然后在你确定mPrintWriterClient 可以已经准备好的地方notify() , 也要加上synchronized。。  
      

  5.   


    我做过一个类似的,是这么做的:在主线程里先初始化socket,mPrintWriterClient,然后开启要访问mPrintWriterClient的子线程,然后注册重力监听器,这个过程放到Activity的onResume()方法里面,然后在onPause()方法里面解除重力监听器。不知道这样符不符合你的需求。