以前在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下是可以正常运行的,不知道哪位有没有遇到这样的问题。

解决方案 »

  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。这个帖子就算散分贴吧,大家来领点分,呵呵。
      

  2.   

    恩,恭喜,没什么需要就不要版本迁移了,swt变化还是挺大的。一般自己比较常用的界面,最好做一个自己的layout。
      

  3.   

    各个版本之间还是有不小的差别的,可以看相关的history来了解这些。