有精通socket通信的大神吗?求助!!!!!

钱某 2017-05-25 05:31:35
我用java swing做了一个游戏在Eclipse里面运行,想实现一个玩家交流功能,我编写好了双向通信的代码,运行ok的,再把这个方法添加到游戏的“聊天室”按钮上,问题来了:通过游戏聊天室按钮点击,出现聊天框之后输入不进去文字,也关闭不了窗口,不知道怎么回事。ps(本来单独运行游戏可以关闭窗口,点击任何界面上的按钮;单独运行聊天框也可以点击关闭按钮并且聊天,但是两个一组合起来就不行了,游戏界面按钮全部点不到,也不能聊天,不能关闭)


新人求助!!!
...全文
809 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
钱某 2018-01-23
  • 打赏
  • 举报
回复
谢谢了,问题已解决!
爱摸鱼de老邪 2017-05-25
  • 打赏
  • 举报
回复
跟socket通信无关,你把所有的事情都放在Swing线程里去做了,耗时的操作会使Swing界面“假死”的,尤其socket是一直在监听消息,那个while(true)循环会一直占用Swing线程的。在Java中,逻辑处理要放在后台线程,Swing线程只做界面处理该做的事情。看看Swing线程模型相关的内容,你会处理好这个问题的。
钱某 2017-05-25
  • 打赏
  • 举报
回复
服务端源代码: public class MyTcp extends JFrame implements ActionListener{ static Label label=new Label("输入"); static JTextField tf=new JTextField(20); static JTextArea ta=new JTextArea(); Container cc; final JScrollPane panel= new JScrollPane(); Socket Client; ServerSocket server; InputStream DataIn; OutputStream DataOut; public MyTcp(){ super("这里是玩家一"); setSize(250,400); setLocation(835,200); panel.add(label); panel.add(tf); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); cc=this.getContentPane(); getContentPane().add(panel,BorderLayout.CENTER); panel.setViewportView(ta); tf.addActionListener(this); cc.add(tf,"South"); add("Center",ta); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); //show(); setVisible(true); try{ server=new ServerSocket(5000); Client=server.accept(); ta.append("已经和客户端建立连接"+Client.getInetAddress().getHostName()+"\n\n"); DataIn=Client.getInputStream(); DataOut=Client.getOutputStream(); }catch(IOException ioe){ //ioe.printStackTrace(); } while(true){ try{ byte buff[]=new byte[512]; DataIn.read(buff); String str=new String(buff); ta.append("玩家二:"+str+"\n"); }catch(IOException ioe){ //ioe.printStackTrace(); } } } public static void main(String[] args) { MyTcp tcp=new MyTcp(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub try{ String str=new String(tf.getText()); byte buf[]=str.getBytes(); tf.setText(""); DataOut.write(buf); ta.append("玩家一:"+str+"\n"); }catch(IOException ioe){ //ioe.printStackTrace(); } } }

58,453

社区成员

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

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