在用SWT进行socket编程中遇到的一些问题的总结
2010-12-27 13:26
603 查看
在把awt转换成swt的编写过程中遇到了很多问题,不过最终还是解决了。做以下总结:
1.UI线程与非UI线程的联系。
在swt中,UI线程只有能一个,第一个运行UI的线程创建了DISPLAY实例即为UI线程,不一定为MAIN所在的主线程。其他线程如果要进行UI操作,必须通过UI线程的同步syncExec或者异步asyncExec操作来执行。不然会抛出SWT的SWTException非法线程介入错误。在其他线程调用UI的地方用
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{ ....UI操作代码即可 }
});
swt的这种机制起先非常不了解,不过通过查阅相关的java 论坛,了解到这种方式有利于维护界面的稳定性,让界面只处于一个UI线程控制之下。也提高了程序的效率。
2.socket中 getinputstream()和getoutputstream()的联系。
当客户端发出socket请求之后,就会打开socket的 getinputstream()和getoutputstream()流,当执行到socket.getinputstream()的时候,在服务器响应之情会一直阻塞,所以在服务器端一定要先getoutputstream(),然后在getinputstream(),不然客户端和服务器会相互等待引起死锁。还有个问题跟swt的机制有关,因为swt的非UI线程中的UI部分需有UI线程调用,这两者不能并行执行,如果在主线程中有个客户端getinputstream()处于阻塞,然后在把服务器上的getoutputstream()和getinputstream()写在非UI线程的UI模块中,这样在本机测试的时候也会引起互相等待而引起死锁,客户端等待服务器的流,而服务器等待主线程的执行完毕。这样,日后再写程序过程中需养成一个好习惯只把有关UI的操作写在非UI线程的
3.在程序编完后还遇到了swt 程序关闭的时候会出现进程中还有javaw进程的情况.
解决办法:在主程序的关闭按钮上添加监听事件,加上Display.getDefault().dispose()方法和System.exit(0)即可。还有关于swt打包成jar文件,swt导出的jar文件运行方式.在生成的jar文件中的mainfest.mf中添加一行代码Class-Path: swt.jar 然后把swt.jar与要运行的jar文件放在同一目录下即可。
1.UI线程与非UI线程的联系。
在swt中,UI线程只有能一个,第一个运行UI的线程创建了DISPLAY实例即为UI线程,不一定为MAIN所在的主线程。其他线程如果要进行UI操作,必须通过UI线程的同步syncExec或者异步asyncExec操作来执行。不然会抛出SWT的SWTException非法线程介入错误。在其他线程调用UI的地方用
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{ ....UI操作代码即可 }
});
swt的这种机制起先非常不了解,不过通过查阅相关的java 论坛,了解到这种方式有利于维护界面的稳定性,让界面只处于一个UI线程控制之下。也提高了程序的效率。
2.socket中 getinputstream()和getoutputstream()的联系。
当客户端发出socket请求之后,就会打开socket的 getinputstream()和getoutputstream()流,当执行到socket.getinputstream()的时候,在服务器响应之情会一直阻塞,所以在服务器端一定要先getoutputstream(),然后在getinputstream(),不然客户端和服务器会相互等待引起死锁。还有个问题跟swt的机制有关,因为swt的非UI线程中的UI部分需有UI线程调用,这两者不能并行执行,如果在主线程中有个客户端getinputstream()处于阻塞,然后在把服务器上的getoutputstream()和getinputstream()写在非UI线程的UI模块中,这样在本机测试的时候也会引起互相等待而引起死锁,客户端等待服务器的流,而服务器等待主线程的执行完毕。这样,日后再写程序过程中需养成一个好习惯只把有关UI的操作写在非UI线程的
3.在程序编完后还遇到了swt 程序关闭的时候会出现进程中还有javaw进程的情况.
解决办法:在主程序的关闭按钮上添加监听事件,加上Display.getDefault().dispose()方法和System.exit(0)即可。还有关于swt打包成jar文件,swt导出的jar文件运行方式.在生成的jar文件中的mainfest.mf中添加一行代码Class-Path: swt.jar 然后把swt.jar与要运行的jar文件放在同一目录下即可。
相关文章推荐
- 通过 Socket 发送 Http协议 上传图片到速卖通服务器过程中遇到的一些小的问题 总结
- VS2010下winform.net基础上编程遇到的一些小问题总结
- 关于php socket编程中遇到的一些问题
- 通过 Socket 发送 Http协议 上传图片到速卖通服务器过程中遇到的一些小的问题 总结
- UDP编程中遇到的一些问题总结
- 使用css进行网页排版中遇到的一些问题总结
- socket iOS 与java 后台进行socket通讯遇到的问题以及解决方法
- 开发CRM中遇到的一些问题总结
- 近期学习javascript和jquery遇到一些问题的技巧知识总结
- 近段时间在开发中遇到的一些问题的总结
- java与c/c++进行socket通信的一些问题(2)
- 最近遇到的一些问题总结
- Retrofit进行WebService请求遇到的问题总结
- APICloud框架——总结一下最近开发APP遇到的一些问题
- 开发多列AutoComplate功能遇到一些问题的总结
- (转)WTL学习过程中遇到的一些问题总结
- C++ 编程遇到的一些问题
- 使用Appache的FTPClient遇到的一些文件名乱码问题-总结(遇到了再续....)
- 关于Linux安装python画图遇到的一些问题总结
- socket iOS 与java 后台进行socket通讯遇到的问题以及解决方法