一个关于线程的小问题 jButton1.setText("正在侦听...");server=new ServerSocket(port);互换一下试试。另外建议ServerSocket可以再构造方法里创建嘛。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 互换一下"正在侦听...",就没有意义了啊。程序设计是这样的 服务器端一个文本框 一个按钮 文本框里输入端口号以后 在点按钮才开始侦听呢 所以 server=new ServerSocket(port);只能放到按钮的事件里,不能放到构造方法里 1.public Socket accept() throws IOException侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 创建新套接字 s,如果存在安全管理器,则使用 s.getInetAddress().getHostAddress() 和 s.getPort() 作为参数调用安全管理器的 checkAccept 方法,以确保允许该操作。这可能会导致 SecurityException 异常。2.试试非ServerSocketChannelpublic abstract SocketChannel accept() throws IOException接受到此通道套接字的连接。 如果此通道处于非阻塞模式,那么在不存在挂起的连接时,此方法将直接返回 null。否则,在新的连接可用或者发生 I/O 错误之前会无限期地阻塞它。 不管此通道的阻塞模式如何,此方法返回的套接字通道(如果有)将处于阻塞模式。 当点击侦听的时候给jTextArea1 赋值 正在监听 试一下, 个人感觉是因为jButton1被点击时候的事件还未处理完成不能予以赋值 , 就像数据库事务原子性一样 。 当有一个客户端链接连接过来时才算一个事件的完结吧。个人理解不对请指教 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(); } } }); } }); 你的accept方法阻塞了当前线程,方法一直不能返回。所以界面卡死在了这里。actionPerformed方法里,你需要设置button的text,启动一个异步线程进行监听。然后迅速的返回。这样界面就没问题了。注意,设置text="正在监听..."以后,应该改变button的响应方法。也就是说,下次再点不再是这个动作了。否则肯定会抛异常。 [*] 如何修改jar包里的文件? 菜鸟求解! 小白java正则表达式遇到问题,求助啊。 如何用java写个程序把内存压上来 两个类 帮帮忙,insert into简单sql怎么写? JAVA程序能通过编译,不能运行的问题 我在 java扩展版提了一个关于Timer和TimerTask的问题? 求人帮忙解决 列表框选择问题 _ 为什么选一下,反应两次,如何才能做到只反应一次? java调用procedure为何出错,why? 能不能帮我重写一下flowlayout布局,实现windows(桌面或文件夹)布局,给60分,谢谢了 高手帮忙解决下
程序设计是这样的 服务器端一个文本框 一个按钮 文本框里输入端口号以后 在点按钮才开始侦听呢 所以 server=new ServerSocket(port);只能放到按钮的事件里,不能放到构造方法里
public Socket accept()
throws IOException侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
创建新套接字 s,如果存在安全管理器,则使用 s.getInetAddress().getHostAddress() 和 s.getPort() 作为参数调用安全管理器的 checkAccept 方法,以确保允许该操作。这可能会导致 SecurityException 异常。
2.
试试非
ServerSocketChannel
public abstract SocketChannel accept()
throws IOException接受到此通道套接字的连接。
如果此通道处于非阻塞模式,那么在不存在挂起的连接时,此方法将直接返回 null。否则,在新的连接可用或者发生 I/O 错误之前会无限期地阻塞它。 不管此通道的阻塞模式如何,此方法返回的套接字通道(如果有)将处于阻塞模式。
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();
}
}
});
} });
actionPerformed方法里,你需要设置button的text,启动一个异步线程进行监听。然后迅速的返回。这样界面就没问题了。
注意,设置text="正在监听..."以后,应该改变button的响应方法。也就是说,下次再点不再是这个动作了。否则肯定会抛异常。