尝试调用实现客户端线程的类时强制关闭

时间:2011-04-14 20:30:50

标签: android multithreading client runnable

我在android上有一个client-sever应用程序,它们都运行在同一台机器上。 在我的客户端应用程序的第一个活动中,我尝试调用应该连接到服务器应用程序的客户端类,但是我强行关闭。

这是我在我的应用程序的第一个活动中调用客户端类的方式:

Thread cThread=new Thread(new ClientThread());
cThread.start(); 

这是我的客户端类:

public class ClientThread implements Runnable{
    private Handler handler=new Handler();
    Socket  socket;
    private TextView clientState;
    public void run()
    {
        try
        {
            InetAddress serverAddr=InetAddress.getByName("10.0.2.2");
            handler.post(new Runnable(){
                public void run(){
                    clientState.setText(" try to connect!");
                }
            });
        socket=new Socket(serverAddr, 8080);

            //connected=true;
        handler.post(new Runnable(){
                public void run(){
                    clientState.setText("Connected!");
                }
            });

        }
        catch(Exception e){
            handler.post(new Runnable(){
                public void run(){
                    clientState.setText("Error");
                    }
            });

            e.printStackTrace();
        }

    }

      protected void onStop() {
            super.onStop();
            try {
                 // make sure you close the socket upon exiting
                //out.close();
                 socket.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
        }

}

有人可以说出错了或至少给了我一个想法。 我应该说的一件事是我的客户端工作正常 - 它连接到服务器,当客户端类集成在我的第一个活动中时(我的意思是,最初我没有客户端类都在第一个活动中...而且它工作得很好)。 我在这里了解更多细节! 提前谢谢你!

1 个答案:

答案 0 :(得分:1)

如果没有堆栈跟踪,它看起来就像崩溃一样导致你没有初始化textview。

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    TextView tv;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView)findViewById(R.id.mytextview);
    }

    public class ClientThread extends Thread {
    ...// Do NOT init textview
    }
}