免费注册 查看新帖 |

Chinaunix

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

事件触发不了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-14 16:39 |只看该作者 |倒序浏览
做了一个界面,包括确定和取消两个按钮,确定触发的事件是:
SSLServerSocket listen = new SSLServerSocket(ctx, port);
        while (true) {
          SSLSocket s = (SSLSocket) listen.accept();
         }
希望取消可以触发中断上述连接,现在出现了这样一个问题:
一旦按下按钮”确定“,可以正确执行上述代码,但是按下”取消“或者右上角那个关闭”X“,都没有用,无法中断程序,除非使用任务管理器来结束程序。请赐教,不胜感激

论坛徽章:
0
2 [报告]
发表于 2004-10-14 16:51 |只看该作者

事件触发不了

这个不是事件触发不了的问题
而是那个事件处理线程没法被kill的问题

论坛徽章:
0
3 [报告]
发表于 2004-10-14 18:48 |只看该作者

事件触发不了

那我应该怎样kill

论坛徽章:
0
4 [报告]
发表于 2004-10-14 18:53 |只看该作者

事件触发不了

设置窗口关闭的事件了吗?

论坛徽章:
0
5 [报告]
发表于 2004-10-14 19:02 |只看该作者

事件触发不了

首先你得定义关闭程序的事件,以及该事件的Handler。其次,SSLSocket的accept方法以及while循环应该放在线程中,否则UI会被挂起,关闭程序的按钮不起作用。

论坛徽章:
0
6 [报告]
发表于 2004-10-14 19:17 |只看该作者

事件触发不了

[quote]原帖由 "gazania"]SSLSocket的accept方法以及while循环应该放在线程中,否则UI会被挂起,关闭程序的按钮不起作用。[/quote 发表:
是吗,这是什么原理,如果单独放在一个现成中,那么主程序结束,那个现成也不会结束吧.除非是守护现成.

论坛徽章:
0
7 [报告]
发表于 2004-10-14 19:21 |只看该作者

事件触发不了

这时是关不了窗口的
必须先把那个线程kill掉
要不这样吧
你试试把你的监听代码放到另外一个进程中
使用多线程可以解决这个问题

论坛徽章:
0
8 [报告]
发表于 2004-10-14 19:26 |只看该作者

事件触发不了

我写了一个例子
罗嗦了点
对付看吧

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;

/**
* @author Administrator
*
* 更改所生成类型注释的模板为
* 窗口 >; 首选项 >; Java >; 代码生成 >; 代码和注释
*/
public class TestKill {
        private JFrame f;
        public static void main(String[] args) {
                TestKill t=new TestKill();
               
               
        }
        public TestKill(){
                JButton bt1;
                JButton bt2;
                bt1=new JButton("bt1";
                bt2=new JButton("bt2";
                bt1.addActionListener(new ActionListener(){                       
                        public void actionPerformed(ActionEvent e) {
                                // TODO 自动生成方法存根
                                new Thread(){
                                        public void run(){
                                                while(true){
                                                        try {
                                                                Thread.sleep(1000);
                                                        } catch (InterruptedException e1) {
                                                                // TODO 自动生成 catch 块
                                                                e1.printStackTrace();
                                                        }
                                                }
                                        }
                               
                                }.start();
                               
                        }
                });
                f =new JFrame();
                f.addWindowListener(new WindowListener(){

                        public void windowOpened(WindowEvent e) {
                                // TODO 自动生成方法存根
                               
                        }

                        public void windowClosing(WindowEvent e) {
                                // TODO 自动生成方法存根
                                System.exit(0);
                        }

                        public void windowClosed(WindowEvent e) {
                                // TODO 自动生成方法存根
                               
                        }

                        public void windowIconified(WindowEvent e) {
                                // TODO 自动生成方法存根
                               
                        }

                        public void windowDeiconified(WindowEvent e) {
                                // TODO 自动生成方法存根
                               
                        }

                        public void windowActivated(WindowEvent e) {
                                // TODO 自动生成方法存根
                               
                        }

                        public void windowDeactivated(WindowEvent e) {
                                // TODO 自动生成方法存根
                               
                        }
                       
                });
                f.getContentPane().setLayout(new FlowLayout());
                f.getContentPane().add(bt1);
                f.getContentPane().add(bt2);
                f.pack();
                f.setVisible(true);
               
        }
}

论坛徽章:
0
9 [报告]
发表于 2004-10-14 19:28 |只看该作者

事件触发不了

好像默认jvm不会重开一个线程来处理事件响应

论坛徽章:
0
10 [报告]
发表于 2004-10-14 19:51 |只看该作者

事件触发不了

谢谢大家。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP