应用程序崩溃,而启动新的线程 [英] Application crashes while starting the new thread

查看:191
本文介绍了应用程序崩溃,而启动新的线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个线程类,当我启动线程,并在主类我的应用程序创建线程类的实例得到崩溃。我的主要活动code创建线程是:

 广播broadcastobject =新的广播(消息);
                broadcastobject.start();

我的线程类是:

 公共类广播继承Thread {私人DatagramSocket的插座;
字符串str;
私有静态最终诠释TIMEOUT_MS = 10;
WifiManager mWifi;
的EditText等;
DatagramPacket类包;
按钮BT;
私有静态最终诠释SERVERPORT = 11111;
私有静态最后弦乐SERVER_IP =192.168.1.255;  公共广播(字符串){
    // TODO自动生成构造函数存根
     海峡=到;
}
/ *
 私人的InetAddress getBroadcastAddress()抛出IOException
        DhcpInfo DHCP = mWifi.getDhcpInfo();
        如果(DHCP == NULL){
          //Log.d(TAG,无法获取DHCP信息);
          返回null;
        }        INT广播=(dhcp.ipAddress&安培; dhcp.netmask)| 〜dhcp.netmask;
        字节[] =四边形新的字节[4];
        为(中间体K = 0; K&4;; k ++)
          四边形[K] =(字节)((广播>> K * 8)及为0xFF);
        返回InetAddress.getByAddress(四芯);
      } * /
    @覆盖
    公共无效的run(){
            尝试{
                插座=新的DatagramSocket(SERVERPORT);
                socket.setBroadcast(真);
            }赶上(SocketException E1){
                // TODO自动生成catch块
                e1.printStackTrace();
            }
        // Socket的(TIMEOUT_MS);
            InetAddress类serverAddr = NULL;                尝试{
                    serverAddr = InetAddress.getByName(SERVER_IP);
                }赶上(E1的UnknownHostException){
                    // TODO自动生成catch块
                    e1.printStackTrace();
                }
        包=新的DatagramPacket(str.getBytes(),str.length(),serverAddr,SERVERPORT);
                    尝试{
                        socket.send(包);
                    }赶上(IOException异常五){
                        // TODO自动生成catch块
                        e.printStackTrace();
                    }
    }    }

我的日志猫的错误是:

 八月九日至一日:23:47.949:D / gralloc_goldfish(1720):无仿真模拟GPU检测。
 8月9日至1日:24:01.941:W / System.err的(1720):产生java.net.SocketException:套接字失败:EACCES(权限被拒绝)
 8月9日至1日:24:01.941:W / System.err的(1720):在libcore.io.IoBridge.socket(IoBridge.java:573)
 8月9日至1日:24:01.979:W / System.err的(1720):在java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:91)
  8月9日至1日:24:01.979:W / System.err的(1720):在java.net.DatagramSocket.createSocket(DatagramSocket.java:131)
 8月9日至1日:24:01.979:W / System.err的(1720):在java.net.DatagramSocket中的<&初始化GT;(DatagramSocket.java:78)
  8月9日至1日:24:01.989:W / System.err的(1720):在soft.b.peopleassist.broadcast.run(broadcast.java:65)
  8月9日至1日:24:01.989:W / System.err的(1720):libcore.io.ErrnoException:产生的原因插座失败:EACCES(权限被拒绝)
  8月9日至1日:24:01.999:W / System.err的(1720):在libcore.io.Posix.socket(本机方法)
  8月9日至1日:24:01.999:W / System.err的(1720):在libcore.io.BlockGuardOs.socket(BlockGuardOs.java:169)
  8月9日至1日:24:01.999:W / System.err的(1720):在libcore.io.IoBridge.socket(IoBridge.java:558)
 8月9日至1日:24:02.009:W / System.err的(1720):... 4个
 8月9日至1日:24:02.149:W / dalvikvm(1720):主题ID = 11:螺纹未捕获的异常(组= 0x409961f8)退出
 8月9日至1日:24:02.149:E / AndroidRuntime(1720):致命异常:螺纹114
  8月9日至1日:24:02.149:E / AndroidRuntime(1720):显示java.lang.NullPointerException
  8月9日至1日:24:02.149:E / AndroidRuntime(1720):在soft.b.peopleassist.broadcast.run(broadcast.java:92)
8月9日至1日:24:03.329:W / IInputConnectionWrapper(1720):showStatusIcon上的非活动InputConnection


解决方案

线程不是问题,真正的问题是 EACCES(拒绝),添加此允许您的清单文件

 <使用许可权的android:NAME =android.permission.INTERNET对>< /使用许可权>

I have a thread class when I start the thread and create the instance of thread class in the main class my app get crash. My main activity code for creating the thread is:

            broadcast broadcastobject=new broadcast(messages);
                broadcastobject.start();

My thread class is :

    public class broadcast extends Thread {

private DatagramSocket socket;
String str;
private static final int TIMEOUT_MS = 10;
WifiManager mWifi;
EditText et;
DatagramPacket packet;
Button bt;
private static final int SERVERPORT = 11111;
private static final String SERVER_IP = "192.168.1.255";

  public broadcast(String to) {
    // TODO Auto-generated constructor stub
     str = to;
}


/*
 private InetAddress getBroadcastAddress() throws IOException {
        DhcpInfo dhcp = mWifi.getDhcpInfo();
        if (dhcp == null) {
          //Log.d(TAG, "Could not get dhcp info");
          return null;
        }

        int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
        byte[] quads = new byte[4];
        for (int k = 0; k < 4; k++)
          quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
        return InetAddress.getByAddress(quads);
      }

 */
    @Override
    public void run() {


            try {
                socket = new DatagramSocket(SERVERPORT);
                socket.setBroadcast(true);
            } catch (SocketException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }


        //              socket.setSoTimeout(TIMEOUT_MS);


            InetAddress serverAddr = null;

                try {
                    serverAddr =            InetAddress.getByName(SERVER_IP);
                } catch (UnknownHostException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }




        packet = new DatagramPacket(str.getBytes(), str.length(),serverAddr,SERVERPORT);


                    try {
                        socket.send(packet);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }


    } 

    }

My log cat error is:

 09-01 08:23:47.949: D/gralloc_goldfish(1720): Emulator without GPU emulation detected.
 09-01 08:24:01.941: W/System.err(1720): java.net.SocketException: socket failed: EACCES (Permission denied)
 09-01 08:24:01.941: W/System.err(1720):    at libcore.io.IoBridge.socket(IoBridge.java:573)
 09-01 08:24:01.979: W/System.err(1720):    at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:91)
  09-01 08:24:01.979: W/System.err(1720):   at java.net.DatagramSocket.createSocket(DatagramSocket.java:131)
 09-01 08:24:01.979: W/System.err(1720):    at java.net.DatagramSocket.<init>(DatagramSocket.java:78)
  09-01 08:24:01.989: W/System.err(1720):   at soft.b.peopleassist.broadcast.run(broadcast.java:65)
  09-01 08:24:01.989: W/System.err(1720): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
  09-01 08:24:01.999: W/System.err(1720):   at libcore.io.Posix.socket(Native Method)
  09-01 08:24:01.999: W/System.err(1720):   at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:169)
  09-01 08:24:01.999: W/System.err(1720):   at libcore.io.IoBridge.socket(IoBridge.java:558)
 09-01 08:24:02.009: W/System.err(1720):    ... 4 more
 09-01 08:24:02.149: W/dalvikvm(1720): threadid=11: thread exiting with uncaught exception (group=0x409961f8)
 09-01 08:24:02.149: E/AndroidRuntime(1720): FATAL EXCEPTION: Thread-114
  09-01 08:24:02.149: E/AndroidRuntime(1720): java.lang.NullPointerException
  09-01 08:24:02.149: E/AndroidRuntime(1720):   at soft.b.peopleassist.broadcast.run(broadcast.java:92)
09-01 08:24:03.329: W/IInputConnectionWrapper(1720): showStatusIcon on inactive InputConnection

解决方案

The thread is not the issue, the real issue is the EACCES (Permission denied), add this permission to your manifest file

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

这篇关于应用程序崩溃,而启动新的线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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