bjkamui 2012-12-10 20:43
浏览 351
已采纳

SWT 关闭窗口后 非UI线程如何关闭?

刚刚开始学SWT,有个问题不知道如何解决
[code="java"]
public static void main(String[] args) {
try {
ClientLoginWindow window = new ClientLoginWindow();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}

public void open() {
    Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    UdpThread.startup();//这是一个阻塞的线程,用于接收数据
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

[/code]
我在窗口启动时起了一个用于接收数据的线程,该线程是阻塞的.
问题是我在关闭窗口之后,java 进程还活着,我想应该是UdpThread线程没有终止造成的.
如果真是这样的话,我改如何终止线程,难道我要在线程里加判断如果窗口关闭了就终止?

  • 写回答

5条回答 默认 最新

  • jinnianshilongnian 2012-12-10 20:48
    关注

    两种方式:
    1、l注册关闭窗口的监听器
    2、Runtime.addShutdownHook()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • iteye_5246 2012-12-10 20:53
    关注

    // 关闭窗口时事件
    frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    if (isConnected) {
    closeConnection();// 关闭连接
    }
    System.exit(0);// 退出程序
    }
    });

    评论
  • cpszgy 2012-12-11 09:29
    关注

    一个建议你将该监听程序设置为守护,setDeamon()。
    这样在你的ui进程结束后,由于整个程序没有非守护进程,自然全部结束。

    评论
  • hasiwang 2012-12-11 11:56
    关注

    启动时记录进程号,拿进程号停止啊

    评论
  • sdl1984 2012-12-11 14:51
    关注

    其实我感觉在最后加一行关闭线程的代码就行了...

    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 如何利用C语言实现用最小二乘法选配两个经验公式
  • ¥50 vue-codemirror如何对指定行 指定位置的 字符进行背景颜色或者字体颜色的修改?
  • ¥15 有人会思科模拟器嘛?
  • ¥30 遇到一个的问题,请教各位
  • ¥20 matlab报错,vflux计算潜流通量
  • ¥15 我该如何实现鼠标按下GUI按钮时就执行按钮里面的操作的方法
  • ¥15 关于#硬件工程#的问题:我这边有个锁相环电路没有效果
  • ¥15 20款 27寸imac苹果一体机装win10后,蓝牙耳机和音响放歌曲卡顿断断续续.
  • ¥15 VB.NET 父窗体调取子窗体报错
  • ¥15 python海龟作图如何改代码使其最后画出来的是一个镜像翻转的图形