Java 启动新线程时应用程序崩溃

Java 启动新线程时应用程序崩溃,java,android,multithreading,android-intent,datagram,Java,Android,Multithreading,Android Intent,Datagram,当我启动thread并在主类my app get crash中创建thread类的实例时,我有一个thread类。我创建线程的主要活动代码是: broadcast broadcastobject=new broadcast(messages); broadcastobject.start(); 我的线程类是: public class broadcast extends Thread { private DatagramSock

当我启动thread并在主类my app get crash中创建thread类的实例时,我有一个thread类。我创建线程的主要活动代码是:

            broadcast broadcastobject=new broadcast(messages);
                broadcastobject.start();
我的线程类是:

    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();
                    }


    } 

    }
公共类广播扩展线程{
专用DatagramSocket套接字;
字符串str;
专用静态最终整数超时\u MS=10;
WIFI经理mWifi;
编辑文本;
数据包;
按钮bt;
专用静态最终int服务器端口=11111;
私有静态最终字符串服务器\u IP=“192.168.1.255”;
公共广播(字符串到){
//TODO自动生成的构造函数存根
str=to;
}
/*
私有InetAddress getBroadcastAddress()引发IOException{
DhcpInfo dhcp=mWifi.getDhcpInfo();
如果(dhcp==null){
//Log.d(标记“无法获取dhcp信息”);
返回null;
}
int broadcast=(dhcp.ipAddress&dhcp.netmask)|~dhcp.netmask;
字节[]四元组=新字节[4];
对于(int k=0;k<4;k++)
四元组[k]=(字节)((广播>>k*8)和0xFF);
返回InetAddress.getByAddress(quads);
}
*/
@凌驾
公开募捐{
试一试{
套接字=新的DatagramSocket(服务器端口);
插座。路演(真实);
}捕获(SocketException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
//socket.setSoTimeout(超时\u MS);
inetAddressServerAddr=null;
试一试{
serverAddr=InetAddress.getByName(服务器IP);
}捕获(未知后异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
packet=newdatagrampacket(str.getBytes()、str.length()、serverAddr、SERVERPORT);
试一试{
socket.send(包);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
} 
}
我的日志cat错误是:

 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
09-01 08:23:47.949:D/gralloc_金鱼(1720):未检测到GPU仿真的仿真器。
09-01 08:24:01.941:W/System.err(1720):java.net.SocketException:socket失败:EACCES(权限被拒绝)
09-01 08:24:01.941:W/System.err(1720):位于libcore.io.IoBridge.socket(IoBridge.java:573)
09-01 08:24:01.979:W/System.err(1720):位于java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:91)
09-01 08:24:01.979:W/System.err(1720):位于java.net.DatagramSocket.createSocket(DatagramSocket.java:131)
09-01 08:24:01.979:W/System.err(1720):位于java.net.DatagramSocket(DatagramSocket.java:78)
09-01 08:24:01.989:W/System.err(1720):在soft.b.peoplesist.broadcast.run(broadcast.java:65)
09-01 08:24:01.989:W/System.err(1720):原因:libcore.io.ErrnoException:套接字失败:EACCES(权限被拒绝)
09-01 08:24:01.999:W/System.err(1720):位于libcore.io.Posix.socket(本机方法)
09-01 08:24:01.999:W/System.err(1720):位于libcore.io.BlockGuardOs.socket(BlockGuardOs.java:169)
09-01 08:24:01.999:W/System.err(1720):位于libcore.io.IoBridge.socket(IoBridge.java:558)
09-01 08:24:02.009:W/系统错误(1720):。。。4更多
09-01 08:24:02.149:W/dalvikvm(1720):threadid=11:线程以未捕获异常退出(组=0x409961f8)
09-01 08:24:02.149:E/AndroidRuntime(1720):致命异常:线程114
09-01 08:24:02.149:E/AndroidRuntime(1720):java.lang.NullPointerException
09-01 08:24:02.149:E/AndroidRuntime(1720):在soft.b.peoplesist.broadcast.run(broadcast.java:92)
09-01 08:24:03.329:W/IIInputConnectionWrapper(1720):在非活动输入连接上显示状态图标

线程不是问题,真正的问题是
EACCES(权限被拒绝)
,请将此权限添加到清单文件中

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


这与线程无关。您将在该文件的第92行获得NPE。我怀疑str可能是空的?如果不知道第92行在哪里,很难知道。你能花点时间整理代码、删除块注释并重新格式化吗?