当前位置: 代码迷 >> J2SE >> 求问,这边启动线程不执行run方法了
  详细解决方案

求问,这边启动线程不执行run方法了

热度:229   发布时间:2016-04-23 19:59:07.0
求问,这里启动线程不执行run方法了

调试就是在创建buf那调回去了,run方法都没进去过。
或者有好心人私聊传项目过去运行看一下吗

------解决思路----------------------
是一个private的class? 你是在junit里面调线程吗?junit不支持多线程调试的
------解决思路----------------------
第一直觉是null != ds返回false了,是不是这个ds为空才导致你后面的打印都没显示?
------解决思路----------------------
断点调试下啊,看看run方法调用了没
------解决思路----------------------
我发现你实现的Runnable的类在方法里面,方法如果没有被执行的话,对象就不会创建
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

是一个private的class? 你是在junit里面调线程吗?junit不支持多线程调试的

junit没用上,代码放度盘了,能帮忙看下吗


在eclipse里面能进入线程啊, 都打印"Connect to server"了, 不过你那代码TankClient里面最好在main方法中加上try catch, TankServer里面也是,调试时先启动TankServer

能不能打印a packet received from server!这句?
问题出在NetClient类里的说


其实问题并没有处在NetClient,而是在TankServer的UDPThread类收到客户端请求后的回复里面:
dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort));  
 这一句set 返回的port有问题,你在用tcp跟TankServer建立联系的时候上传了port(2333)保存起来,想当然的以为客户端也是拿这个端口发UDP数据了,其实在NetClient中发送UDP的时候只能规定服务端的端口,也就是TankServer.UDP_PORT=6666,而没法规定客户端的发送数据包的端口,因此在服务器端得到的数据包的address端口是一个随机的端口。所以解决方案就是把这行:dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort));  改为dp.setSocketAddress(dp.getSocketAddress());即可,因为此时的socket address已经变成发送方的address了。
  相关解决方案