问题描述
刚刚开始学SWT,有个问题不知道如何解决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();}}}我在窗口启动时起了一个用于接收数据的线程,该线程是阻塞的.问题是我在关闭窗口之后,java 进程还活着,我想应该是UdpThread线程没有终止造成的.如果真是这样的话,我改如何终止线程,难道我要在线程里加判断如果窗口关闭了就终止?
解决方案
两种方式:1、l注册关闭窗口的监听器2、Runtime.addShutdownHook()
解决方案二:
// 关闭窗口时事件frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {if (isConnected) {closeConnection();// 关闭连接}System.exit(0);// 退出程序}});
解决方案三:
其实我感觉在最后加一行关闭线程的代码就行了...
解决方案四:
启动时记录进程号,拿进程号停止啊
解决方案五:
一个建议你将该监听程序设置为守护,setDeamon()。这样在你的ui进程结束后,由于整个程序没有非守护进程,自然全部结束。