楼主format_jade(至尊玉)2005-07-30 22:19:33 在 Java / Eclipse 提问
我是个Eclipse的新手,向各位虚心请教以下问题:
1,SWT的组件机制好像有些不同于AWT/Swing,它竟然不用add方法,而是设置一个坐标,我就纳闷,我怎么保证我设置的坐标不超出我的父组件而无法显示呢?SWT的组件之间到底是个什么样的关系呢?和AWT/Swing有什么不同呢?
2,Display是干吗的,它在整个组件的显示中承担什么任务,担当什么角色?
3,Eclipse带的那个SWT等API的帮助文档没有索引,哪里可以下到类似jdk的chm版的eclipse的有索引查询的帮助文档呢?
4,我的编辑器有时候老是显示一部份代码,右边的大纲视图的杰作,如何让编辑器一直显示全部代码?
5,对于一个Shell来说,close和dispose,open和setVisible有什么区别??
6,这段代码是什么意思??
while(!s.isDisposed()){
If(!d.readAndDispatch()){
d.sleep();//指的是线程sleep还是终止呀,如果sleep了整个程序能退出吗?
}
}
7,在Eclipse下用SWT写的程序,在Eclipse下执行没有问题,但是导出为.jar文件,执行时说找不到main类,我明明搜索设置了呀,怎么回事??
8,用eclipse的api写的程序如果拿到一没有Eclipse而只有java虚拟机的环境下执行,程序上哪找eclipse的api定义的类去呀?这个问题是怎么解决的呀!
请各位能帮帮小弟,万分感谢 !!
3 楼FutureStonesoft(丑石)回复于 2005-08-06 00:13:01 得分 10
说实在的,我真的很讨厌 2K_Ice_Bug(速溶咖啡(不加糖)) 的傲气,楼主的问题虽然比较初级,但是大家都是这样过来的,只不过当初可能有些人靠自己看文档资料就明白了,有些人则很困惑,很需要大家讨论一下,又何尝不可呢?每个人的理解能力和学习能力本来就不同。楼主列出那么多问题,很有学习的诚意,也并没有什么很愚蠢的问题,这样打击人家的积极性是不对的……
1。SWT是只用设置坐标的吗?呵呵,建立一个SWT控件都指定了其父容器了啊,它们的构造方法一般都有两个参数,一个是父容器,另一个是控件样式如new SWTControl(parent, style)。它的定位当然考布局来定义了,最好用的,当然是FormLayout
2。Display可以理解为一个显示器类(实际上不是),事实上它负责管理各个SWT组件与其运行平台(操作系统)之间的连接,你知道,SWT实际上是利用JNI调用本地OS的GUI API实现。
3。好像没有chm格式的帮助文档,但是我觉得Eclipse里的这些帮助很好用啊,虽然没有各个类的索引,但是分类还是相当清晰的
4。有这个问题吗?呵呵,你的意思是代码折叠了,想让代码不折叠,是吧?这个可以到Window->Preference->Java->Editor->Foding里设置。
5。close就是关闭窗口,在内部其实它也是去调用dispose来释放它占用的内存资源的,
open是打开窗口、显示窗口、激活窗口,
setVisible是设置窗口可见还是不可见的
6。这个问题不错,如果你知道操作系统的消息运作机制,那么就不难理解了,SWT有一个监听线程,它处理操作系统发给SWT组件的消息,它是一直在后台运行的
while(!s.isDisposed()){ //如果窗体没有被释放,那么一直执行。调用Shell.close()方法或者Shell.disposed()时,跳出循环
//也既要求退出程序了,于是便退出程序
if(!d.readAndDispatch()){ //用Display读取操作系统给这个窗体程序的消息队列,如果没有读到要求分发的消息,那么该窗体的消息处理线程进入睡眠状态
//如果读到消息队列中有要求分发的消息,那么消息处理线程被唤起处理消息事件
d.sleep();
}
}
7。导出为jar的时候,你必须在MANIFEST.MF里指定完整的主类名(包含包名)才可以直接运行啊
8。你用到多少Eclipse的api就必须把它们全部一起跟程序发布,不过我想,你指的是独立运行SWT程序吧,那只要几个dll文件就可以了,对于Eclipse3.1,在eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.1.0.jar
文件中,有三个dll文件,你把这个jar文件解压出来,将那三个dll文件放到system32目录等等在系统环境变量中有定义的地方就可以了,事实上也可以不解压出来,但个人觉得还是解压出来比较好; 对于Eclipse3.0x,在Eclipse/plugins/org.eclipse.swt.win32_3.0.2/os/win32/x86目录中有两个dll,同样的方法。