以前在Eclipse3.0.1上开发的一个swt的程序,使用的swt的版本是swt-win32-3063.dll这个dll。
现在我想把这个程序升级到Eclipse3.2.1下开发,使用的swt的版本是swt-win32-3235.dll。
结果出现了这样的错误
Exception in thread "main" java.lang.ClassCastException: org.eclipse.swt.layout.FormData
at org.eclipse.swt.layout.FillLayout.computeChildSize(FillLayout.java:141)
at org.eclipse.swt.layout.FillLayout.computeSize(FillLayout.java:119)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.custom.ScrolledCompositeLayout.computeSize(ScrolledCompositeLayout.java:32)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.layout.FormData.computeSize(FormData.java:116)
at org.eclipse.swt.layout.FormData.getWidth(FormData.java:145)
at org.eclipse.swt.layout.FormLayout.computeWidth(FormLayout.java:275)
at org.eclipse.swt.layout.FormLayout.layout(FormLayout.java:330)
at org.eclipse.swt.layout.FormLayout.computeSize(FormLayout.java:239)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.layout.FillData.computeSize(FillData.java:26)
at org.eclipse.swt.layout.FillLayout.computeChildSize(FillLayout.java:148)
at org.eclipse.swt.layout.FillLayout.computeSize(FillLayout.java:119)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.layout.FormData.computeSize(FormData.java:116)
at org.eclipse.swt.layout.FormData.getWidth(FormData.java:145)
at org.eclipse.swt.layout.FormData.getRightAttachment(FormData.java:246)
at org.eclipse.swt.layout.FormLayout.layout(FormLayout.java:305)
at org.eclipse.swt.layout.FormLayout.layout(FormLayout.java:284)
at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:989)
at org.eclipse.swt.widgets.Composite.layout(Composite.java:531)
at org.eclipse.swt.widgets.Composite.layout(Composite.java:496)
at org.eclipse.swt.widgets.Composite.layout(Composite.java:466)同样的代码,在3.0.1下是可以正常运行的,不知道哪位有没有遇到这样的问题。
现在我想把这个程序升级到Eclipse3.2.1下开发,使用的swt的版本是swt-win32-3235.dll。
结果出现了这样的错误
Exception in thread "main" java.lang.ClassCastException: org.eclipse.swt.layout.FormData
at org.eclipse.swt.layout.FillLayout.computeChildSize(FillLayout.java:141)
at org.eclipse.swt.layout.FillLayout.computeSize(FillLayout.java:119)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.custom.ScrolledCompositeLayout.computeSize(ScrolledCompositeLayout.java:32)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.layout.FormData.computeSize(FormData.java:116)
at org.eclipse.swt.layout.FormData.getWidth(FormData.java:145)
at org.eclipse.swt.layout.FormLayout.computeWidth(FormLayout.java:275)
at org.eclipse.swt.layout.FormLayout.layout(FormLayout.java:330)
at org.eclipse.swt.layout.FormLayout.computeSize(FormLayout.java:239)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.layout.FillData.computeSize(FillData.java:26)
at org.eclipse.swt.layout.FillLayout.computeChildSize(FillLayout.java:148)
at org.eclipse.swt.layout.FillLayout.computeSize(FillLayout.java:119)
at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
at org.eclipse.swt.layout.FormData.computeSize(FormData.java:116)
at org.eclipse.swt.layout.FormData.getWidth(FormData.java:145)
at org.eclipse.swt.layout.FormData.getRightAttachment(FormData.java:246)
at org.eclipse.swt.layout.FormLayout.layout(FormLayout.java:305)
at org.eclipse.swt.layout.FormLayout.layout(FormLayout.java:284)
at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:989)
at org.eclipse.swt.widgets.Composite.layout(Composite.java:531)
at org.eclipse.swt.widgets.Composite.layout(Composite.java:496)
at org.eclipse.swt.widgets.Composite.layout(Composite.java:466)同样的代码,在3.0.1下是可以正常运行的,不知道哪位有没有遇到这样的问题。
估计是SWT的新版本修正了老版本的bug。
老版本里面对一个Composite的layout的设定,如果前面设置成FillLayout,那么如果对它的子Composite设置FormData的话,它的子Composite会按照FormLayout进行排列。
新版本里面对一个Composite的layout的设定,如果前面设置成FillLayout,后面如果对它的子Composite设置FormData的话,SWT会判断出这个设定不对,不能转化为FormLayout。应该是这个原因,本来想向SWT开发组织提供这个Bug报告,结果自己在慢慢抽出代码的时候,发现了问题。还是当初编程比较毛糙,不知道这个Composite该设置成什么Layout的时候,统统暂时使用FillLayout了,老版本的SWT放过了我,新版本的SWT帮我检查出了这个bug。这个帖子就算散分贴吧,大家来领点分,呵呵。