首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

回答小弟我,立即给分!(1)

2012-02-01 
回答我,立即给分!!!!!!!!!!!!!!!(1)importjava.io.*importjava.net.*importjava.awt.*importjavax.swin

回答我,立即给分!!!!!!!!!!!!!!!(1)
import   java.io.*;
import   java.net.*;
import   java.awt.*;
import   javax.swing.*;
import   java.awt.event.*;


public   class   Server   extends   JFrame
{
        private   JTextField   field;
        private   JTextArea     area;
        private   JScrollPane   scrollPane;
        private   JButton   button;
        private   ServerSocket   server_1;
        private   Socket               server_2;
        private   ObjectOutputStream   out;
        private   ObjectInputStream     in;
                 
             
   
        public   Server()
        {
              super( "我的第一个聊天程序 ");
              field   =   new   JTextField(30);
              area     =   new   JTextArea(10,10);
              scrollPane   =   new   JScrollPane(area);
              button   =   new   JButton( "提交 ");
              getContentPane().add(field,BorderLayout.NORTH);
              getContentPane().add(scrollPane,BorderLayout.CENTER);
              getContentPane().add(button,BorderLayout.SOUTH);
             
             
             
              setSize(300,300);
              setVisible(true);
              connect();
             
        }

        public   void   connect()
        {
              try{
              server_1   =   new   ServerSocket(4700);
              area.append( "服务器启动,等待连接 ");
              server_2   =   server_1.accept();
              area.append( "\n连接成功,可以进行通讯了 ");
              out     =   new   ObjectOutputStream(server_2.getOutputStream());
              in       =   new   ObjectInputStream(server_2.getInputStream());  
              out.flush();
              Mread();
              }catch(Exception   e){}
             
        }
         
        public   void   Mread()


        {
              try{
              String   get   =   (String)in.readObject();
              while(true)
              {
                    get   =(String)   in.readObject();
                   
                    displayMessage(get);  
                    if(get.equals( "ByeBye "))
                    {
                          area.append( "\n通讯结束 ");
                          break;
                    }
                    out.flush();
              }  
       
              close();}catch(Exception   eee){}
       
        }
        private   void   displayMessage(   final   String   messageToDisplay   )
        {
           
            SwingUtilities.invokeLater(
                  new   Runnable()   {     //   inner   class   to   ensure   GUI   updates   properly

                        public   void   run()   //   updates   displayArea
                        {
                              area.append(   "\n"+messageToDisplay   );
                              area.setCaretPosition(  
                              area.getText().length()   );
                        }

                  }     //   end   inner   class

            );   //   end   call   to   SwingUtilities.invokeLater
      }

        public   void   close()
        {
                  try{
                  out.close();
                  in.close();
                  server_2.close();
                  server_1.close();}catch(Exception   e){}
        }

          public   static   void   main(String   args[])


          {
                Server   app   =   new   Server();
                app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
          }
   

}


为什么这个程序我用Client发一个你好,却陷入无穷循环,而下面的不会,因为帖子太长发不完),应该怎么解决,我知道是whie()那里的原因,可是下面(下一帖)的程序就能行,为什么呢?

[解决办法]
不是陷入无穷循环了,而是阻塞了:
String get = (String)in.readObject(); --> String get = null;
[解决办法]
请借助开发工具(Eclipse或JBuilder)进行单步调试,你就发现问题所在!除非你的编码能力很强,否则仅通过代码走查很难发现问题所在。
[解决办法]
Majia_(马甲先生) ( ) 信誉:100 Blog 加为好友 2007-05-27 20:57:06 得分: 0


不是陷入无穷循环了,而是阻塞了:
String get = (String)in.readObject(); --> String get = null;


-------------------------------------------------------
正解!!
[解决办法]
up
[解决办法]
如果在这里不能得到满意回答,请尝试到IT付费问答社区www.nlld.net提问
[解决办法]
waynehuge(跳舞吧,相爱吧,唱歌吧,工作吧,生活吧!!) ( ) 信誉:100 Blog 加为好友 2007-5-27 22:25:34 得分: 0



Majia_(马甲先生) ( ) 信誉:100 Blog 加为好友 2007-05-27 20:57:06 得分: 0


不是陷入无穷循环了,而是阻塞了:
String get = (String)in.readObject(); --> String get = null;


-------------------------------------------------------
正解!!


恩 通过
[解决办法]
:)

我也弄过一个,不过都不记得怎么解决了;诚如上面大人提到,直接DEBUG发现问题就OK了
[解决办法]
你应该另外启动一个线程,用来监听Socket端口,就是说当你启动服务端的时候,同时要启动另外一个线程来监听端口,否则会发生阻塞!

热点排行
Bad Request.