单击JButton时不会发生相应的事件
2015-05-14 13:31
141 查看
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,不要在这中间在穿插其他语句。
相关文章推荐
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- 静态文本框相应单击事件
- 模拟用户操作Input元素,不会触发相应事件
- VB用End退出,不会发生Form_Unload事件
- 1)复选框中文字在左边;2)水平滚动条最小值为4、最大值为72;且在窗体Load事件中通过代码设置;3)单击任何复选框,标签上文字样式都发生变化;4)单击任意单选按钮,标签上文字字体都发生改变;5)拖
- 双击 单击 CLISTbOX 同时相应 单击 双击 事件 ~~~
- 根据数据库的记录动态生成菜单并添加相应的单击事件
- 模拟用户操作Input元素,不会触发相应事件
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- 为什么谷歌不会发生“魏则西事件”?
- gridview里item是textView、Button单击事件相应,以及按下效果的取去除
- ListView同时相应长按点击事件和单击事件的解决方法
- MFC 通过发送消息完成按钮操作模拟鼠标单击事件的发生的问题
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
- LabVIEW中利用事件结构演示用鼠标单击前面板窗口时,发生鼠标按下事件并处理鼠标按下事件
- :1)复选框中文字在左边;2)最下部为水平滚动条。水平滚动条最小值为4、最大值为72;且在窗体Load事件中通过代码设置;3)单击任何复选框,标签上文字样式都发生变化;4)单击任意单选按钮,标签上文字
- 【java】事件监听——通过点击不同的按钮,让面板的背景色发生相应的变化
- 扩展GridView控件(6) - 响应行的单击事件和双击事件