单击JButton时不会发生相应的事件

本文详细解析了服务器端代码中的问题,解释了为何在某些情况下点击按钮无法正常响应,并提供了解决方案。通过调整代码结构,将添加ActionListener的操作移至特定方法之前,可以有效解决此问题,确保应用程序的流畅运行。
摘要由CSDN通过智能技术生成
package ServerAndClient;

import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;

public class Server  extends JFrame implements ActionListener
{
	private JTextArea textareareceiveorsend;
	private JTextField textfieldtosend;
	private String texttosend=null;
	private JButton sendbutton;
	private ServerSocket server;
	private Socket client;
	
	public Server()
	{
		super("Server");
		JPanel panel=new JPanel();
		setContentPane(panel);
		
		panel.setLayout(null);
		
		textareareceiveorsend=new JTextArea(">>wait for connection\r\n");
		textareareceiveorsend.setLineWrap(true);
		textareareceiveorsend.setBounds(0,0, 500,300);
		panel.add(textareareceiveorsend);
		
		textfieldtosend=new JTextField();
		textfieldtosend.setBounds(50,320,400, 30);
		panel.add(textfieldtosend);
		
		sendbutton=new JButton("发送");
		sendbutton.setBounds(215,400,70, 30);
		panel.add(sendbutton);

		this.setSize(500,500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);

		waitForConnection();
		writeTextInTextarea();
		<pre name="code" class="java">		sendbutton.addActionListener(this);
}public void waitForConnection(){final int PORT=4040;try {server=new ServerSocket(PORT);client=server.accept();textareareceiveorsend.append("connect with"+client.getLocalAddress()+"\r\n");}catch (IOException e) {e.printStackTrace();}}public void writeTextInTextarea(){try{BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));while(true){String text=in.readLine();if(text.equals("byebye")){textareareceiveorsend.append(text+"\r\n");break;}else{textareareceiveorsend.append("<<"+text+"\r\n");}}}catch(IOException e){e.printStackTrace();}}public void actionPerformed(ActionEvent e){texttosend=textfieldtosend.getText();textareareceiveorsend.append(">>"+texttosend+"\r\n");textfieldtosend.setText("");PrintWriter out;try {out = new PrintWriter(client.getOutputStream(),true);out.println(texttosend);} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}}}
 如上面那段服务器端代码所示,在addActionListener前面还有两个方法,会造成点击JButton没有反应的情况,其实仔细想一想就能明白原因,在那两个方法中有相关的语句是从客户端中读取客户端发送来的信息,如果客户端一直不发送来信息,那么线程就会阻塞在那里,当然点击方法后面的JButton就不会有任何反应,解决方案就是将addActionListener放在这两个方法的前面。建议初始化完一个按钮后就立刻添加addActionListener,不要在这中间在穿插其他语句。
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值