山那边是海 发表于 2015-1-18 11:47:50

JAVA网站制作之[Eclipse条记]在SWT中无效的办理图形系...

因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。条记|图形
本文部份内容和灵感来自eclipse.org网站,特此声明。更多内容,请参考:

http://eclipse.org/articles/Article-SWT-Design-2/SWT-Design-2.html



因为SWT间接跟操纵体系打交道,以是我们必要在处置体系的图形资本时分外当心,以避免不用要的资本泄露。所幸SWT供应了很好的资本办理机制,我们尽年夜多半情形下必要做的只是确保两条准绳:

第一条准绳–谁分派谁烧毁

第二条准绳–父控件烧毁的同时烧毁子控件



上面我们分离来看一看这两条在实践中是怎样表现的。

先看第一条准绳。乍一看这仿佛是空话,可是在实践中常常并不是那末复杂。起首,机关办法不即是分派资本,实践上分派资本能够产生在一个类中的任何中央和一个对象性命周期的任什么时候候,只需你的代码告知操纵体系如许做。你必需包管一切由你分派的资本当你不再利用时挪用其dispose()办法;同时你也必需包管一切不是由你分派的资本不要任意挪用其dispose()办法,不然极可能会影响到实践分派的那段相干代码的一般事情。好动静是,为了明白和简化这第一条准绳所划定的合作,SWT在计划之初就断定上去,一切基于体系资本的SWT类都在其机关办法中完成一切所需的资本分派,在其他办法中则没有任何分派体系资本的举措,以是我们能够侥幸的如许对待SWT的资本办理:假如你挪用了某个SWT类的机关办法,那末就由你来挪用其dispose()办法开释资本;假如你没有挪用某个SWT类的机关办法,即使你利用了这个类的实例,也不该该由你来挪用其dispose()办法。就是这么明白。

例如讲,你new了一个Font对象,那末当你不再必要它时,就应当挪用dispose();假如你经由过程某个控件的getFont()办法获得一个Font对象并利用后,你不该该往烧毁它,而应当交给谁人详细的控件去向理。

关于第二条准绳,SWT有一个很好的机制往撑持它,那就是,一切的SWT控件,详细讲,Composite类及其子类的实例,都必需有一个父控件,这个父控件的援用在子控件的机关办法中被传进。必要注重的是,一切这些控件的不带参数的机关办法都只要默许会见级别,因而我们不克不及在本人的SWT程序中间接挪用如许的默许机关办法而只能供应一个父控件的援用,而在Widget类(Composit的父类)的带参数机关办法中,它会挪用以下办法:


voidcheckParent(Widgetparent){if(parent==null)error(SWT.ERROR_NULL_ARGUMENT);parent.checkWidget();}
进而:


protectedvoidcheckWidget(){Displaydisplay=this.display;if(display==null)error(SWT.ERROR_WIDGET_DISPOSED);if(display.thread!=Thread.currentThread())error(SWT.ERROR_THREAD_INVALID_ACCESS);if((state&DISPOSED)!=0)error(SWT.ERROR_WIDGET_DISPOSED);}
如许的反省包管了任何控件在创立时都有父控件。当我们挪用某个Composite的dispose()办法时,它会挪用:


voidreleaseChildren(){Control[]children=_getChildren();for(inti=0;i<children.length;i++){Controlchild=children;if(!child.isDisposed())child.releaseResources();}}
个中的_getChildren()办法经由过程OS对象的办法遍历控件的子控件,然后汇总到一同分离挪用releaseResources()办法开释控件和句柄。

回到前次的SimplestSWT的例子:


packagesean.test.swt;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Shell;publicclassSimplestSWT{publicstaticvoidmain(String[]args){Displaydisplay=newDisplay();Shellshell=newShell(display);shell.pack();shell.open();while(!shell.isDisposed()){if(!display.readAndDispatch()){display.sleep();}}display.dispose();}}


这傍边,Display是一个顶层的设备,它承继自Device类,而Device类完成了Drawable接口。Shell的父类是Decoration,而Decoration承继自Canvas,Canvas承继自Composite,终极这条承继链一向连到Widget类。我们在创立Shell示例的时分,必要告知机关办法它的父控件是甚么,在这里就是display。因而当我们最初挪用display.dispose()时,固然我们没有明白写shell.dispose(),我们的Shell实例也随之烧毁了。

这就是SWT的资本办理机制,稍有破例的是MenuItem的setMenu()办法和Control的setMenu()办法,它们经由过程显式挪用setMenu的体例注册本人的父控件。



先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。

灵魂腐蚀 发表于 2015-1-21 15:14:02

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

老尸 发表于 2015-1-24 12:01:48

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

变相怪杰 发表于 2015-2-1 09:51:02

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

小妖女 发表于 2015-2-7 02:21:51

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

蒙在股里 发表于 2015-2-9 17:48:39

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

柔情似水 发表于 2015-2-27 13:50:39

是一种使网页(Web Page)产生生动活泼画面的语言

海妖 发表于 2015-2-28 17:00:22

是一种突破用户端机器环境和CPU

山那边是海 发表于 2015-3-7 01:43:27

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

乐观 发表于 2015-3-14 00:34:56

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

不帅 发表于 2015-3-18 02:37:52

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

冷月葬花魂 发表于 2015-3-19 22:40:58

是一种为 Internet发展的计算机语言

简单生活 发表于 2015-3-25 21:10:32

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

愤怒的大鸟 发表于 2015-3-27 04:00:26

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

第二个灵魂 发表于 2015-4-3 05:18:45

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

精灵巫婆 发表于 2015-4-6 06:17:23

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

金色的骷髅 发表于 2015-4-6 16:37:31

是一种使用者不需花费很多时间学习的语言

admin 发表于 2015-4-10 06:30:48

是一种为 Internet发展的计算机语言

只想知道 发表于 2015-4-12 15:23:29

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

仓酷云 发表于 2015-4-18 12:40:43

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
页: [1] 2
查看完整版本: JAVA网站制作之[Eclipse条记]在SWT中无效的办理图形系...