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

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

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

    打赏 评论

相关推荐 更多相似问题