由于某种原因,这个flex 4代码给了我一个错误,但我不知道为什么。在我的WindowedApplication中有:
var prefs:Object = fs.readObject();
fs.close();
var rect:Rectangle = new Rectangle();
rect = prefs.bounds as Rectangle;
this.bounds = rect; // error here错误消息: ArgumentError: Error #2007:参数rect必须为非空。
我最初也尝试过不使用rect对象,只是尝试了:
this.bounds = prefs.bounds as Rectangle;这给了我以下错误:
TypeError:错误#1034:类型强制失败:无法将Object@1 dbbe1f1转换为flash.geom.Rectangle。
这似乎是一个假错误,因为我可以将pref.bounds赋值为rect而不出现错误。我不知道为什么这不管用。它在flex 3兼容模式下工作,但这也破坏了我的许多火花组件,所以我不能使用它。
发布于 2010-07-09 13:45:58
rect = prefs.bounds as Rectangle;rect以null告终,因为prefs.bounds不是Rectangle类的实例。如果as关键字转换失败,则返回null。
只需在调用trace(prefs.bounds);之后给出一个readObject,看看它包含了什么。
更新:
prefs.bounds中的值具有x、y、宽度和高度属性这一事实并不使它成为Rectangle对象--它只是一个具有这四个属性的对象。简单的解决方案是从这些值创建一个Rectangle对象,并使用它:
var prefs:Object = fs.readObject();
var rect:Rectangle = new Rectangle(prefs.bounds.x, prefs.bounds.y, prefs.width, prefs.height);
this.bounds = rect;如果在将矩形对象写入文件流之前调用registerClassAlias,则readObject将返回适当类型的对象,而不是一般类型的对象。
registerClassAlias("flash.geom.Rectangle", Rectangle);
fs.writeObject(this.bounds);
//later...
//Casting with () will throw an error if the read object is not a Rectangle
var rect:Rectangle = Rectangle(fs.readObject());
trace(rect);https://stackoverflow.com/questions/3213106
复制相似问题