应用程序崩溃,而启动新的线程 [英] Application crashes while starting the new thread
本文介绍了应用程序崩溃,而启动新的线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个线程类,当我启动线程,并在主类我的应用程序创建线程类的实例得到崩溃。我的主要活动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屋!
查看全文