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
이것은 스레드와 아무 관련이 없습니다. 해당 파일의 92 행에 NPE가 있습니다. 아마 str이 null 인 것 같습니까? 92 호선이 어디인지 알지 못해서 알기 힘듭니다. – Gray
코드를 잘라내어 블록 주석을 제거하고 다시 포맷 해보십시오. – Gray