关于swing线程的问题

cajsaiko 2014-06-14 07:38:17
我知道swing程序有一个事件分发线程和主线程,但是今天碰到一个怪事,一个socket聊天程序里面,把socket的连接放在一个按钮的监听事件里面,然后在主线程里面无限循环监听对方输入,但是无限循环的时候有点问题,见下面代码,只粘了循环那部分
String s = null;
while (true) {
System.out.println("test");
if (in != null) {
System.out.println("ok");
try {
s = "okok";
s = in.readLine();
System.out.println(s);
while (s != "") {
t.append("\n" + "Server:" + s);
s = in.readLine();
}
} catch (Exception e) {
}
}

如果是这样写的话运行的时候控制台就会不断输出test直到我点了按钮建立socket连接,之后一切正常,但是当我去掉输出test那句话再点连接的话给对方发送消息没问题,但是对方发消息过来却不会输出来,简而言之就是建立了socket连接却像没进到if判断语句里一样,我把那句话换成sleep()也没问题,感觉很微妙啊,难道是因为循环太快跟不上吗?但是这两个都不在一个线程里面啊,而且in在点了按钮的那个时候就不在是空了啊,之后的判断没理由不进去啊,调试的时候我运行到if那里再点击按钮也能够进去,实在是很疑惑,请教大家了
...全文
1329 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cajsaiko 2014-06-15
  • 打赏
  • 举报
回复
引用 1 楼 huxiweng 的回复:
那是肯定的咯 你while里面if不执行,不是一直循环么
循环我当然知道,但是在循环的时候我点了连接的话in就不为null了,此时没有理由不进入if语句内啊,而且我调试的时候也很正常,问题就是去掉输入test那句话的话并没有进入if语句体内,很奇怪一句输出能影响条件判断吗?
teemai 2014-06-14
  • 打赏
  • 举报
回复
那是肯定的咯 你while里面if不执行,不是一直循环么

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧