2013-08-31 9 views
0

스레드를 시작하고 주 클래스에서 스레드 클래스의 인스턴스를 만들 때 스레드 클래스가 있습니다. 응용 프로그램이 다운됩니다. 스레드를 만드는 내 주요 활동 코드는 다음과 같습니다새 스레드를 시작하는 동안 응용 프로그램이 충돌합니다.

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


    } 

    } 

내 로그 고양이 오류는 다음과 같습니다

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 
+0

이것은 스레드와 아무 관련이 없습니다. 해당 파일의 92 행에 NPE가 있습니다. 아마 str이 null 인 것 같습니까? 92 호선이 어디인지 알지 못해서 알기 힘듭니다. – Gray

+0

코드를 잘라내어 블록 주석을 제거하고 다시 포맷 해보십시오. – Gray

답변

0

스레드 문제는 아니다 실제 문제는 EACCES (Permission denied)이며,이 권한을 매니페스트 파일에 추가하십시오.

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

아니 아니 문제. – Nerd

관련 문제