免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3094 | 回复: 5
打印 上一主题 下一主题

求助,无法使用按钮监听事件。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-15 19:11 |只看该作者 |倒序浏览
JAVA新手请教

压缩包内为源码. 出错的地方被我用/* */注释掉了。

如果直接连接的话可以运行。

但是当我试着让按钮来启动 连接目标时 会导致无反映.


求高手指点迷津。。

图形聊天.rar

16.41 KB, 下载次数: 97

聊天程序源码

论坛徽章:
0
2 [报告]
发表于 2007-01-16 03:39 |只看该作者
Jtext_2定义为别的方法里面的局部变量了,改成属性就好了

论坛徽章:
0
3 [报告]
发表于 2007-01-16 11:14 |只看该作者

大哥~改回来了还是不行啊


  1. import java.net.*;
  2. import java.io.*;
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.event.*;

  7. public class Client implements Runnable
  8. {
  9.         Thread thread;
  10.         static Socket clientS;
  11.         static boolean end = true;
  12.         static boolean startEcho = false;
  13.         static BufferedReader in;
  14.         static PrintStream out;
  15.         static String addr = "127.0.0.1";
  16.         static int port = 1100;
  17.         static String exit = "exit";
  18.         static JButton Button_1 = new JButton("连接"); //定义连接按钮.
  19.         static JButton Button_2 = new JButton("中断"); //定义退出按钮.
  20.         static final JTextArea Jarea_1 = new JTextArea(13,33); //定义输出框  行数,列数
  21.         static final JTextField Jtext_1 = new JTextField(30); //定义聊天框
  22.         static final JTextField Jtext_2 = new JTextField(20); //定义IP地址框


  23.         public static void main(String args[])
  24.         {
  25.                 Client client = new Client();
  26.                 client.FrameStart();
  27.                 client.ListenerStart();

  28.                
  29.         } // end main()


  30.         public void FrameStart()
  31.         {

  32.                 //创建窗体
  33.                 JFrame frame = new JFrame("【点对点聊天程序 - 客户端】 vision 1.0");
  34.                 Jtext_2.setText("127.0.0.1");

  35.                 //创建面板 1, 2, 3
  36.                 JPanel panel_1 = new JPanel(); //输入
  37.                 JPanel panel_2 = new JPanel(); //工具栏
  38.                 JPanel panel_3 = new JPanel(); //输出
  39.                 Jarea_1.setEditable(false); //输出框不可以输入字符.
  40.                 Jarea_1.setBackground(Color.white);
  41.                 ScrollPane Scroll = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); //定义滚动条.
  42.                
  43.                 //添加组件到面板.
  44.                 panel_1.add(new JLabel("聊天内容:")); //添加标签
  45.                 panel_1.add(Jtext_1); //聊天内容输入框.
  46.                 panel_2.add(new JLabel("目标IP:"));
  47.                 panel_2.add(Jtext_2); //IP输入框.
  48.                 panel_2.add(Button_1); //连接按钮.
  49.                 panel_2.add(Button_2); //退出按钮.
  50.                 panel_3.add(Jarea_1);
  51.                 panel_3.setBorder(BorderFactory.createTitledBorder("聊天框"));
  52.                 Scroll.add(panel_3); //滚动条绑定面板 1_3
  53.                
  54.                 //添加面板 1 ,2 到窗体的指定位置
  55.                 frame.getContentPane().add("South",panel_1); //输入框
  56.                 frame.getContentPane().add("North",panel_2);
  57.                 frame.getContentPane().add("Center",Scroll);
  58.        

  59.                 //设置关闭窗体工作方式
  60.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  61.                 frame.pack();

  62.                 //获得当前计算机屏幕尺寸.
  63.                 Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

  64.                 //设置窗口显示位置.
  65.                 int x = (dim.width)/2-150;
  66.                 int y = (dim.height)/2-250;

  67.                 //移动窗口到(x , y)坐标处,这里是屏幕的中央.
  68.                 frame.setLocation(x,y);


  69.                 //设置窗口大小
  70.                 frame.setSize(420,400);

  71.                 //设置背景颜色.
  72.                 frame.setBackground(Color.red);


  73.                
  74.                 //显示窗体
  75.                 frame.setVisible(true);
  76.         }


  77.     public boolean conn() //连接目标的方法.
  78.     {
  79.                 try
  80.                 {
  81.                         clientS=new Socket(addr,port);
  82.             out=new PrintStream(new BufferedOutputStream(clientS.getOutputStream()));
  83.             in=new BufferedReader(new InputStreamReader(clientS.getInputStream()));
  84.                         return true;
  85.         } catch (Exception e){return false;}
  86.     }

  87.         public void ListenerStart()  //启动监听事件的方法.
  88.         {
  89.                 //创建连接按钮监听事件. 使用以后会导致程序无反映。
  90.                 ActionListener btnListener = new ActionListener()
  91.                 {
  92.                         public void actionPerformed(ActionEvent evt)
  93.                         {  //点击相关按钮后的事件.

  94.                                 if (evt.getActionCommand().equals("连接"))
  95.                                 {
  96.                                         if (((Jtext_2.getText()).length())<=0) //输入内容不能为空.
  97.                                         {
  98.                                                 Jarea_1.append("\n^_^ 好像没有输入内容哦!");
  99.                                         } else {
  100.                                                         Jarea_1.append("\n稍等...");
  101.                                                         addr = Jtext_2.getText();
  102.                                                         Jarea_1.append("\n正在连接: "+Jtext_2.getText());
  103.                                                         if (conn())
  104.                                                         {
  105.                                                                 ClientStart();
  106.                                                         } else {
  107.                                                                 Jarea_1.append("\n无法连接 "+addr);
  108.                                                         }
  109.                                                        
  110.                                         }
  111.                                 }


  112.                         }
  113.                 };

  114.                 //创建退出按钮事件
  115.                 ActionListener exitListener = new ActionListener()
  116.                 {
  117.                         public void actionPerformed(ActionEvent evt)
  118.                         {  //点击相关按钮后的事件.
  119.                                 if (evt.getActionCommand().equals("中断"))
  120.                                 {
  121.                                         try
  122.                                         {
  123.                                                 out.println("exit"); //写入缓冲区
  124.                                                 out.flush();   //把缓冲区内容写入到输出流中.                                       
  125.                                         } catch (Exception e){
  126.                                                 Jarea_1.append("\n还没有建立连接无法中断.");
  127.                                         }

  128.                                 }
  129.                         }
  130.                 };

  131.                 //创建聊天框输入监听事件
  132.                 ActionListener textListener = new ActionListener()
  133.                 {
  134.                         public void actionPerformed(ActionEvent event)
  135.                         {
  136.                                 try
  137.                                 {
  138.                                         if (!(Jtext_1.getText()).equals(""))
  139.                                         {
  140.                                                 out.println(Jtext_1.getText()); //写入缓冲区
  141.                                                 out.flush();   //把缓冲区内容写入到输出流中.
  142.                                                 Jarea_1.append("\n"+Jtext_1.getText()); //获得输入框输入,添加到输出框.
  143.                                                 Jtext_1.setText(""); //清空输入框.
  144.                                         } else {
  145.                                                 Jarea_1.append("\n请输入内容.");
  146.                                         }

  147.                                 } catch (Exception e){
  148.                                         Jarea_1.append("\n请先连接对方...");
  149.                                 }
  150.                         }
  151.                 };
  152.          
  153.                 //添加监听对象.
  154.                 Button_1.addActionListener(btnListener); //连接.
  155.                 Button_2.addActionListener(exitListener); //退出.
  156.                 Jtext_1.addActionListener(textListener); //聊天内容输入框
  157.        
  158.         }
  159.         public void ClientStart() //启动方法.
  160.         {
  161.                 try
  162.                 {
  163.                         while (end)
  164.                         {
  165.                                 thread = new Thread(this);
  166.                                 thread.start();
  167.                                 Jarea_1.append("\n"+addr+" 连接成功");
  168.                                 String aline;
  169.                                 while ((aline=in.readLine())!=null)
  170.                                 {
  171.                                         Jarea_1.append("\n"+aline);
  172.                                         if (aline.equals("exit")) //如果服务器返回 "exit"  则跳出回圈.
  173.                                         {
  174.                                                 end=false;
  175.                                                 thread.interrupt();
  176.                                                 break;
  177.                                         }
  178.                                 }
  179.                                 //关闭各种流对象和 Socket 对象
  180.                                 in.close();
  181.                                 out.close();
  182.                                 clientS.close();
  183.                                 Jarea_1.append("\n"+addr+" 断开连接.");
  184.                                 System.exit(0);  //结束程序
  185.                         }
  186.                 }
  187.                 catch (Exception e)
  188.                 {
  189.                         Jarea_1.append("\n"+addr+" 无法连接.");
  190.                 }
  191.         }//end ClientStart
  192.         public void finalize()
  193.         {
  194.                 try
  195.                 {
  196.                         clientS.close();
  197.                 }
  198.                 catch (Exception e)
  199.                 {
  200.                         System.out.println(e);
  201.                 }
  202.         } //end finalize

  203.         public void run()
  204.         {
  205.         } //end run
  206. }//end class
复制代码

[ 本帖最后由 bossyt 于 2007-1-16 11:17 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-01-16 11:19 |只看该作者
使用它启动的时候就会没反映...

  1. ActionListener btnListener = new ActionListener()
  2. {
  3.     public void actionPerformed(ActionEvent evt)
  4.     {  //点击相关按钮后的事件.
  5.         if (evt.getActionCommand().equals("连接"))
  6.         {
  7.             if (((Jtext_2.getText()).length())<=0) //输入内容不能为空.
  8.             {
  9.                  Jarea_1.append("\n^_^ 好像没有输入内容哦!");
  10.             } else {
  11.                   Jarea_1.append("\n稍等...");
  12.                   addr = Jtext_2.getText();
  13.                   Jarea_1.append("\n正在连接: "+Jtext_2.getText());
  14.                   if (conn())
  15.                   {
  16.                        ClientStart();
  17.                   } else {
  18.                          Jarea_1.append("\n无法连接 "+addr);
  19.                   }
  20.                                                         
  21.              }
  22.          }
  23.       }
  24. };
复制代码

[ 本帖最后由 bossyt 于 2007-1-16 11:22 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-01-16 23:44 |只看该作者
嗯?我上次改完测试没问题啊

论坛徽章:
0
6 [报告]
发表于 2007-01-17 11:54 |只看该作者
谢谢指点
找到原因了
我把连接和缓冲输入流放在RUN()方法里就可以了

[ 本帖最后由 bossyt 于 2007-1-17 11:59 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP