jButton1.setText("正在侦听...");
server=new ServerSocket(port);
互换一下试试。
另外建议ServerSocket可以再构造方法里创建嘛。

解决方案 »

  1.   

    互换一下"正在侦听...",就没有意义了啊。
    程序设计是这样的 服务器端一个文本框 一个按钮 文本框里输入端口号以后 在点按钮才开始侦听呢 所以 server=new ServerSocket(port);只能放到按钮的事件里,不能放到构造方法里
      

  2.   

    1.
    public Socket accept()
                  throws IOException侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 
    创建新套接字 s,如果存在安全管理器,则使用 s.getInetAddress().getHostAddress() 和 s.getPort() 作为参数调用安全管理器的 checkAccept 方法,以确保允许该操作。这可能会导致 SecurityException 异常。
    2.
    试试非
    ServerSocketChannel
    public abstract SocketChannel accept()
                                  throws IOException接受到此通道套接字的连接。 
    如果此通道处于非阻塞模式,那么在不存在挂起的连接时,此方法将直接返回 null。否则,在新的连接可用或者发生 I/O 错误之前会无限期地阻塞它。 不管此通道的阻塞模式如何,此方法返回的套接字通道(如果有)将处于阻塞模式。 
      

  3.   

    当点击侦听的时候给jTextArea1 赋值  正在监听 试一下, 个人感觉是因为jButton1被点击时候的事件还未处理完成不能予以赋值 , 就像数据库事务原子性一样 。 当有一个客户端链接连接过来时才算一个事件的完结吧。个人理解不对请指教
      

  4.   

    JButton btn = new JButton();
    btn.setText("start...");
    btn.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    ((JButton)e.getSource()).setText("正在侦听...");
    SwingUtilities.invokeLater(new Runnable(){
    @Override
    public void run() {
    // TODO Auto-generated method stub
    try {
    Socket socket = ss.accept();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    });
    } });
      

  5.   

    你的accept方法阻塞了当前线程,方法一直不能返回。所以界面卡死在了这里。
    actionPerformed方法里,你需要设置button的text,启动一个异步线程进行监听。然后迅速的返回。这样界面就没问题了。
    注意,设置text="正在监听..."以后,应该改变button的响应方法。也就是说,下次再点不再是这个动作了。否则肯定会抛异常。