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

问题描述

刚刚开始学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进程结束后,由于整个程序没有非守护进程,自然全部结束。

时间: 2024-08-29 09:27:36

SWT 关闭窗口后 非UI线程如何关闭?的相关文章

学习通过Thread+Handler实现非UI线程更新UI组件(转)

  [Android线程机制]    出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则:只允许UI线程修改Activity里的UI组件    当一个程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以主线程通常又被叫

c-可执行命令(.bat)启动一个端口,关闭窗口后,如何保证端口不关闭

问题描述 可执行命令(.bat)启动一个端口,关闭窗口后,如何保证端口不关闭 用一个可执行命令文件执行一个命令(java -cp ECDataCenter.jar amsserver.PusherServer 5000)后会在电脑上启动一个端口5000,但是关掉黑窗口后,端口就停了,我在命令行的最后加了个&(变为java -cp ECDataCenter.jar amsserver.PusherServer 5000),关掉黑窗口后,端口也会停,大侠们有没有处理过此问题的?

windows平台发消息到非UI线程.

下面的代码是介绍如何在windows平台发消息到非UI线程. 主要是'PeekMessage || GetMessage' 这两个API的应用. 当他们被调用的时候,如果当前线程还没有消息循环,就会创建一个.利用这个特性比自己手动的去创建一个消息循环要方便得多. 发消息主要是使用线程PostThreadMessage #include <iostream> #include <string> #include "cassert" #include "w

在非UI线程处理Bitmap

http://my.oschina.net/ryanhoo/blog/88344 译者:Ryan Hoo 来源:https://developer.android.com/develop/index.html 译者按: 在Google最新的文档中,提供了一系列含金量相当高的教程.因为种种原因而鲜为人知,真是可惜!Ryan将会细心整理,将之翻译成中文,希望对开发者有所帮助.         本系列是Google关于展示大Bitmap(位图)的官方演示,可以有效的解决内存限制,更加有效的加载并显示图

Android 关于操作UI线程

在非UI线程里访问 Android UI toolkit-这个在一个worker线程修改了 View .这会导致不可预期的结果,而且还难以调试.   为了修复这个问题,Android提供了几个方法从非UI线程访问Android UI toolkit .详见下面的这个列表: Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long)   可以使用 View.post(Runnable) 

JS关闭窗口与JS关闭页面的几种方法小结

 本篇文章要是对JS关闭窗口与JS关闭页面的几种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 第一种:JS定时自动关闭窗口 <script language="javascript"> <!-- function closewin() { self.opener=null; self.close(); } function clock() { i=i-1 document.title="本窗口将在" + i + "秒后

JS关闭窗口与JS关闭页面的几种方法小结_javascript技巧

第一种:JS定时自动关闭窗口<script language="javascript"><!--function closewin(){self.opener=null;self.close();}function clock(){i=i-1document.title="本窗口将在" + i + "秒后自动关闭!";if(i>0)setTimeout("clock();",1000);else clo

python pyqt5-为什么点击按钮后直接关闭窗口了,没有弹出对话框呢?

问题描述 为什么点击按钮后直接关闭窗口了,没有弹出对话框呢? 为什么点击按钮后直接关闭窗口了,没有弹出对话框呢? # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'frmMain.ui' # # Created by: PyQt5 UI code generator 5.5.1 # # WARNING! All changes made in this file will be lost!

MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序

MFC应用程序中处理消息的顺序 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,                    然后调用WindowProc()函数 3.WindowProc()      该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数 4.O