可以创建一个新的线程,将ServerSocket等类的处理放在这个线程中,
在按钮事件处理中启动该线程,就可以了。

解决方案 »

  1.   

    在線程run方法里可以寫上:
    while(isClicked){
      sst.accept();//ServerSocket對象
    }
    isClicked是一個布爾值﹐如果按鈕按下﹐就設它為true;若有其它狀態發生﹐就設它為false.對于"如果不在后台运行,按钮事件就一直不会结束。"這句話﹐我不是很理解﹐樓主能否說得更詳細?
      

  2.   

    我知道楼主的意思,楼主是在按钮处理事件钟启动了ServerSocket,其中ss.accept();方法会HOLD在哪里不能动只有接收到一个SOCKET才可以。基本上是这样。不过楼主,你为什么这么做啊?难道你想只厅一次SOCKET连接吗? 按钮按下--》等连接--》接收连接--》按钮事件处理结束。这个流程实在是。楼上的那位仁兄谢额方法思想是对的但我认为不完善。你的自己启动一个线程,哦,记得这个线程找东西保存它的引用(我讨厌句柄二字)。
    可以参考以下代码。
    1.监听线程用于监听对方来的SOCKET。
    public class Monitor extends Thread{
        public void run(){
            boolean stop = false;
             
            ServerSocket ss = new ServerSocket("%yourHostName%",port);
            while(!stop){
                Socket s = ss.accept();
                /**
                 *你已经接到Socket,想干吗就去自己处理吧。
                 *注意保持该线程句柄
                 */
                
            }
        }
    }onActionPerform(event e){
       
    }
      

  3.   

    刚才浏览器死掉了,现在继续写,这里只是程序片断,需要你自己去完善,比如说异常处理
    1.监听线程用于监听对方来的SOCKET。
        public class Monitor
        extends Thread {
        public void run() {
            boolean stop = false;
            int port = 8081;
            int backLog = 20;
            InetAddress address;
            try {
                address = InetAddress.getByName("eric");
                /**
                 *注意保持该线程句柄,用户日后结束RUN()
                 */
                ServerSocket ss = new ServerSocket(8081, 20, address);            while (!stop) {
                    Socket s = ss.accept(); //你已经接到Socket,想干吗就去自己处理吧。
                    sleep(800);
                }
            }
            catch (UnknownHostException ukEx) {
            }
            catch (IOException ioEx) {
            }
            catch (InterruptedException itEX) {
            }
        }    public void setStop(boolean _stop) {
            this.stop = _stop;
        }
    }2.ActionListener中
        onActionPerform(event e) {
        Monitor monitor = new Monitor(); //注意在全局或某些重要的操作类中保持该线程句柄,
        monitor.run(); //It's ok.
    }
      

  4.   

    谢谢各位,因为起动Socket时要从别的事件处理中获取HOST等数据。