安卓:"螺纹与未捕获的异常(组= 0x4001d800)QUOT退出; [英] Android: "thread exiting with uncaught exception (group=0x4001d800)"

查看:176
本文介绍了安卓:"螺纹与未捕获的异常(组= 0x4001d800)QUOT退出;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在做一个局域网聊天应用程序的Andr​​oid bewteen(客户端)和PC(java_server)上都eclipse.The问题上运行的是Android非常untable和经常死机,然而,它在客户端的我的Java版本运行得很好服务器。请大家帮忙!

还有就是我的code:

 包android.client;
进口java.io.DataInputStream中;
进口java.io.DataOutputStream中;
进口java.io.IOException异常;
进口的java.net.Socket;
进口的java.net.UnknownHostException;
进口java.util.PriorityQueue中;
进口java.util.Queue中;进口android.app.Activity;
进口android.os.Bundle;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
 进口android.widget.EditText;
进口android.widget.ListView;
进口android.widget.TextView;
进口android.widget.Toast;

公共类Chat_client扩展活动实现Runnable {

 私人Socket套接字= NULL;
//私人线程线程= NULL;
私人DataOutputStream类请求输出;
私人诠释clientID的;
私人字符串playerName;
私人DataInputStream以requestIn;
私人的EditText文本;
私人的ListView msgView;
私人ArrayAdapter<串GT; msgArrayAdapter;/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    尝试{
        插座=新的Socket(192.168.2.2,5558);
        Toast.makeText(这一点,
                连接到+ this.socket.getInetAddress()
                Toast.LENGTH_LONG + 10).show();
        this.playerName =魏;
        this.clientID = socket.getLocalPort();
        请求输出=新的DataOutputStream类(socket.getOutputStream());
        requestIn =新DataInputStream所(socket.getInputStream());
        文字=(EditText上)findViewById(R.id.editText1); //黑色文本字段
        msgArrayAdapter =新ArrayAdapter<串GT;(这一点,R.layout.message);
        msgView =(ListView控件)findViewById(R.id.in);
        msgView.setAdapter(this.msgArrayAdapter);
        新的Thread(本)。开始();
    }赶上(UnknownHostException异常乌凯){
        Toast.makeText(这一点,主机未知:+ uke.getMessage()
                Toast.LENGTH_LONG).show();
    }赶上(IOException异常IOE){
        Toast.makeText(这一点,意外的异常:+ ioe.getMessage()
                Toast.LENGTH_LONG).show();
    }
}
//这个方法被调用时按一下按钮,因为我们分配的名称为
//在单击属性按钮
公共无效myClickHandler(视图v){
    Toast.makeText(这一点,送,Toast.LENGTH_LONG / 2).show();
    TextView的视图=(的TextView)findViewById(R.id.editText1);
    字符串消息= view.getText()的toString()。
    text.setText();
    分组P;
    如果(message.startsWith(#)){
        p值=新分组(playerName,1,客户端ID,message.substring(1,message.length()));
    }
    其他
        P =新的数据包(playerName,-1,客户端ID,消息);
    尝试{
        this.requestOut.writeUTF(p.convertToSendFormat());
        requestOut.flush();
        }赶上(IOException异常五){
            e.printStackTrace();
        }
    msgArrayAdapter.add(我:<+信息+>中);}公共无效的run(){
    而(真){
        串R;
        尝试{
            R = this.requestIn.readUTF();
            如果(R!= NULL){
                分组P =转换(R);
                如果(P!= NULL)
                    处理(P);
            }
        }赶上(IOException异常IOE){
            System.exit(0);
        }
    }
}
私人同步包转换(字符串n){
    字符串数据=;
    串[] p值= n.split(,4);
    如果(p.length 4;)
        返回null;
    数据= P [3];
    返回新分组(P [0],的Integer.parseInt(第[1]),的Integer.parseInt(第[2]),
            数据);
}
公共同步无效手柄(包重){
    如果(re.getChannelID()== clientID的){
        msgArrayAdapter.add(我+ re.toString());}
    其他{
        msgArrayAdapter.add(re.getSenderName()+ re.toString());
        }
    }

}

 包android.client;的Bean;
/ **
 *此类处理的网络数据包
 * @author伟
 * /
公共类包实现Serializable {
    私有静态最后的serialVersionUID长= 1509287973845358190L;
    私人字符串SENDERNAME;
    私人诠释actionID;
    私人长期的channelID;
    私人诠释发送;
    私人字符串数据;    众包(字符串名称,诠释actionID,内部CID,串动作2){
        this.senderName =名称;
        this.channelID = CID;
        this.actionID = actionID;
        this.data = 1动作;
        this.sent = -1;
    }    公共字符串getSenderName(){
        返回this.senderName;
    }
    公众诠释getActionID(){
      返回this.actionID;
    }
    公共字符串的getData(){
        返回this.data;
    }    保护无效setChannelID(INT ID){
        this.channelID = ID;
    }
    众长getChannelID(){
        返回this.channelID;
    }    保护无效setSent(布尔B){
        如果(B)的
        this.sent = 1;
        其他
            this.sent = -1;
    }
    保护INT checkSent(){
        返回this.sent;
    }    公共字符串的toString(){
        返回(:+ this.data);
    }
    公共无效addTimeStamp(字符串时间){
        this.data + =的时间;
    }
    公共字符串convertToSendFormat(){
        返回this.senderName ++ this.actionID ++ this.channelID ++ this.data;
    }
    公众诠释getFlag(){
        返回0;
    }    公共无效setFlag(布尔响应){
    }
}

有日志:

  12月10日至12日:54:22.763:DEBUG / AndroidRuntime(360):>>>>>>>>>>> >>> AndroidRuntime START<<<<<<<<<<<<<<
12月10日至12日:54:22.763:DEBUG / AndroidRuntime(360):CheckJNI为ON
12月10日至12日:54:22.895:DEBUG / AndroidRuntime(360):---注册本地函数---
12月10日至12日:54:23.513:信息/ ActivityManager(59):强制停止包android.client的uid = 10033
12月10日至12日:54:23.513:信息/ ActivityManager(59):启动活动:意向{行动= android.intent.action.MAIN猫= [android.intent.category.LAUNCHER] FLG = 0x10000000的CMP = android.client / .Chat_client}
12月10日至12日:54:23.633:DEBUG / AndroidRuntime(360):关闭VM
12月10日至12日:54:23.645:信息/ ActivityManager(59):启动PROC android.client的活动android.client / .Chat_client:PID = 366 UID = 10033导报= {} 3003
12月10日至12日:54:23.664:DEBUG / JDWP(360):GOT唤醒信号,选择的拯救
12月10日至12日:54:23.664:DEBUG / dalvikvm(360):调试器分离;对象注册了1项
12月10日至12日:54:24.024:WARN / ActivityThread(366):应用android.client正在等待调试器端口8100 ...
12月10日至12日:54:24.044:信息/的System.out(366):发送WAIT块
12月10日至12日:54:24.054:信息/ dalvikvm(366):调试器是活跃
12月10日至12日:54:24.244:信息/的System.out(366):调试器连接
12月10日至12日:54:24.244:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:24.444:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:24.644:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:24.843:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:25.053:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:25.254:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:25.454:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:25.654:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:25.866:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:26.075:信息/的System.out(366):等待调试器来解决...
12月10日至12日:54:26.284:信息/的System.out(366):调试先后落户(1322)
12月10日至12日:54:27.544:信息/ ActivityManager(59):显示活动android.client / .Chat_client:3912毫秒(共3912毫秒)
12月10日至12日:54:33.313:DEBUG / dalvikvm(124):GC_EXPLICIT释放642对象/ 35976字节203ms
12月10日至12日:54:38.335:DEBUG / dalvikvm(225):GC_EXPLICIT释放152对象/ 11144字节177ms
12月10日至12日:54:43.384:DEBUG / dalvikvm(261):GC_EXPLICIT释放249对象/ 11840字节205ms
12月10日至12日:55:14.583:WARN / KeyCharacterMap(108):无键盘ID 0
12月10日至12日:55:14.583:WARN / KeyCharacterMap(108):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
12月10日至12日:55:37.295:WARN / dalvikvm(366):主题ID = 7:螺纹未捕获的异常退出(组= 0x4001d800)


解决方案

我已经通过添加一个处理方法解决了prolbem:

 专用处理器将myHandler =新的处理程序(){
    @覆盖
    公共无效的handleMessage(消息MSG){
        字符串str =(字符串)msg.obj;
        如果(msg.what == 1){
            msgArrayAdapter.add(STR);
        }
    }
};`

当然我不知道为什么这个作品,但它只是works.lol,为帮助@Knickedi再次感谢

I'm doing a lan chat app bewteen android (client) and pc (java_server) both running on eclipse.The problem is android very untable and very often crash, however, its running very well on my java version of client and server. please help!

there is my code:

package android.client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.PriorityQueue;
import java.util.Queue;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
 import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Chat_client extends Activity implements Runnable {

private Socket socket = null;
//private Thread thread = null;
private DataOutputStream requestOut;
private int clientID;
private String playerName;
private DataInputStream requestIn;
private EditText text;
private ListView msgView;
private ArrayAdapter<String> msgArrayAdapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try {
        socket = new Socket("192.168.2.2", 5558);
        Toast.makeText(this,
                "Connected to " + this.socket.getInetAddress(),
                Toast.LENGTH_LONG + 10).show();
        this.playerName = "wei";
        this.clientID = socket.getLocalPort();
        requestOut = new DataOutputStream(socket.getOutputStream());
        requestIn = new DataInputStream(socket.getInputStream());
        text = (EditText) findViewById(R.id.editText1);// black textfield
        msgArrayAdapter = new ArrayAdapter<String>(this, R.layout.message);
        msgView = (ListView) findViewById(R.id.in);
        msgView.setAdapter(this.msgArrayAdapter);
        new Thread(this).start();
    } catch (UnknownHostException uke) {
        Toast.makeText(this, "Host unknown:" + uke.getMessage(),
                Toast.LENGTH_LONG).show();
    } catch (IOException ioe) {
        Toast.makeText(this, "Unexpected exception: " + ioe.getMessage(),
                Toast.LENGTH_LONG).show();
    }
}


// This method is called at button click because we assigned the name to the
// "On Click property" of the button
public void myClickHandler(View v) {
    Toast.makeText(this, "sending", Toast.LENGTH_LONG/2).show();
    TextView view = (TextView) findViewById(R.id.editText1);
    String message = view.getText().toString();
    text.setText("");
    Packet p;
    if (message.startsWith("#")) {
        p = new Packet(playerName, 1, clientID,message.substring(1,    message.length()));
    } 
    else 
        p = new Packet(playerName, -1, clientID,message);
    try {
        this.requestOut.writeUTF(p.convertToSendFormat());
        requestOut.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    msgArrayAdapter.add("Me: <" + message + ">");

}

public void run() {
    while (true) {
        String r;
        try {
            r = this.requestIn.readUTF();
            if (r != null) {
                Packet p = convert(r);
                if (p != null)
                    handle(p);
            }
        } catch (IOException ioe) {
            System.exit(0);
        }
    }
}
private synchronized Packet convert(String n) {
    String data = "";
    String[] p = n.split(" ", 4);
    if (p.length < 4)
        return null;
    data = p[3];
    return new Packet(p[0], Integer.parseInt(p[1]), Integer.parseInt(p[2]),
            data);
}
public synchronized void handle(Packet re) {
    if (re.getChannelID() == clientID){
        msgArrayAdapter.add("Me" + re.toString());}
    else{
        msgArrayAdapter.add(re.getSenderName() + re.toString());
        }
    }

}

package android.client;

import java.io.Serializable;
/**
 * This class handles the networking packet
 * @author Wei
 */
public class Packet implements Serializable {
    private static final long serialVersionUID = 1509287973845358190L;
    private String senderName;
    private int actionID;
    private long channelID;
    private int sent;
    private String data;

    public Packet(String name, int actionID,int cid, String action2) {
        this.senderName=name;
        this.channelID = cid;
        this.actionID = actionID;
        this.data = action2;
        this.sent = -1;
    }

    public String getSenderName(){
        return this.senderName;
    }
    public int getActionID(){
      return this.actionID;
    }
    public String getData(){
        return this.data;
    }

    protected void setChannelID(int id){
        this.channelID = id;
    }
    public long getChannelID(){
        return this.channelID;
    }

    protected void setSent(boolean b){
        if(b)
        this.sent = 1;
        else
            this.sent=-1;
    }
    protected int checkSent(){
        return this.sent;
    }

    public String toString(){
        return (" : "+this.data);
    }
    public void addTimeStamp(String time){
        this.data+=time;
    }
    public String convertToSendFormat(){
        return this.senderName+" "+this.actionID+" "+this.channelID+" "+this.data;
    }
    public int getFlag() {
        return 0;
    }

    public void setFlag(boolean response) {
    }


}

there is the Log:

  10-12 12:54:22.763: DEBUG/AndroidRuntime(360): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
10-12 12:54:22.763: DEBUG/AndroidRuntime(360): CheckJNI is ON
10-12 12:54:22.895: DEBUG/AndroidRuntime(360): --- registering native functions ---
10-12 12:54:23.513: INFO/ActivityManager(59): Force stopping package android.client uid=10033
10-12 12:54:23.513: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=android.client/.Chat_client }
10-12 12:54:23.633: DEBUG/AndroidRuntime(360): Shutting down VM
10-12 12:54:23.645: INFO/ActivityManager(59): Start proc android.client for activity android.client/.Chat_client: pid=366 uid=10033 gids={3003}
10-12 12:54:23.664: DEBUG/jdwp(360): Got wake-up signal, bailing out of select
10-12 12:54:23.664: DEBUG/dalvikvm(360): Debugger has detached; object registry had 1 entries
10-12 12:54:24.024: WARN/ActivityThread(366): Application android.client is waiting for the debugger on port 8100...
10-12 12:54:24.044: INFO/System.out(366): Sending WAIT chunk
10-12 12:54:24.054: INFO/dalvikvm(366): Debugger is active
10-12 12:54:24.244: INFO/System.out(366): Debugger has connected
10-12 12:54:24.244: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:24.444: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:24.644: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:24.843: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:25.053: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:25.254: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:25.454: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:25.654: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:25.866: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:26.075: INFO/System.out(366): waiting for debugger to settle...
10-12 12:54:26.284: INFO/System.out(366): debugger has settled (1322)
10-12 12:54:27.544: INFO/ActivityManager(59): Displayed activity android.client/.Chat_client: 3912 ms (total 3912 ms)
10-12 12:54:33.313: DEBUG/dalvikvm(124): GC_EXPLICIT freed 642 objects / 35976 bytes in 203ms
10-12 12:54:38.335: DEBUG/dalvikvm(225): GC_EXPLICIT freed 152 objects / 11144 bytes in 177ms
10-12 12:54:43.384: DEBUG/dalvikvm(261): GC_EXPLICIT freed 249 objects / 11840 bytes in 205ms
10-12 12:55:14.583: WARN/KeyCharacterMap(108): No keyboard for id 0
10-12 12:55:14.583: WARN/KeyCharacterMap(108): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
10-12 12:55:37.295: WARN/dalvikvm(366): threadid=7: thread exiting with uncaught exception (group=0x4001d800)

解决方案

I have solved the prolbem by adding a handler method:

private Handler myHandler = new Handler(){
    @Override
    public void handleMessage(Message msg){
        String  str= (String) msg.obj;
        if(msg.what==1){
            msgArrayAdapter.add(str);
        }
    }
};`

and of course I have no idea why this works, but its just works.lol, thanks again for the help @Knickedi

这篇关于安卓:&QUOT;螺纹与未捕获的异常(组= 0x4001d800)QUOT退出;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆