我最近将代码的一些部分从OL 3.3移植到了OL 5.0。我认为一切都会有效,但是当我尝试使用ant脚本运行它时,我得到了这个错误。
[echo] C:\Program Files\OpenLaszlo Server 5.0.x\Server\lps-5.0.x/WEB-INF/lps/server/bin/lzc.bat
[exec] Compiling: C:\Workspace\application\client\src\TestClient.lzx to TestClient.swf10.swf
[exec] compiler output is Loading configuration file C:\Program Files\OpenLaszlo Server 5.0.x\Server\lps-5.0.x\WEB-INF\frameworks\flex-config.xml
[exec] C:\Documents and Settings\310773\Local Settings\Temp\lzswf9\Workspace\application\client\src\build\TestClient\app.swf (289808 bytes)
所以,我拿了文件夹,然后直接在Laszlo中编译它。它没有显示任何错误,但当swf即将加载主页面时,我收到此错误。知道为什么吗?
TypeError: Error #1007: Instantiation attempted on a non-constructor.
at $lzc$class__mvz/$mvx()
at LzNode/__LZresolveReferences()
at LzNode/__LZcallInit()
at LzCanvas/__LZcallInit()
at LzCanvas/__LZinstantiationDone()
at LzInstantiatorService/makeSomeViews()
at LzInstantiatorService/checkQ()
at Function/http://adobe.com/AS3/2006/builtin::call()
at LzEvent/sendEvent()
at LzIdleKernel$/__update()
答案 0 :(得分:2)
这是您尝试实例化未定义的类时获得的错误消息。这是一个例子:
<canvas>
<class name="myclass">
<handler name="oninit">
// Instantiate a class which is not defined
var x = new lz.missingclass();
</handler>
</class>
<myclass />
</canvas>
检查是否缺少&lt; includes&gt;通过脚本实例化的类。您也可以随时查看Adoboe Flash Run-Time Errors列表,有时此处包含有用的信息。
修改:添加问题的解决方案
这个意见指出了这个问题:
我发现这条线导致了这个问题。
<attribute name="dp" value="$once{new lz.Datapointer()}" />
。知道为什么吗?
如果检查5.0的OpenLaszlo参考,您将看到类名(在类浏览器的左侧)使用不同的大小写;一些类使用camel case(lz.Browser,lz.DataElement),其他类使用全部小写(lz.view,lz.datapointer)。在你的情况下,你应该使用lz.datapointer而不是lz.Datapointer。
因此,此代码将编译并运行,没有任何问题:
<canvas>
<class name="my_class" extends="node">
<attribute name="dp" value="$once{new lz.datapointer()}" />
</class>
<my_class oninit="Debug.inspect(this.dp)" />
</canvas>
测试类的正确名称的一个好方法是在DHTML运行时中使用控制台中的JavaScript,在那里你可以自动完成lz。类名:
调试OpenLaszlo中的SWF#1007错误
如果在SWF运行时遇到#1007错误,我会在禁用调试器并打开JavaScript错误控制台的情况下编译DHTML应用程序。试试这个:
将$ once {}约束的行更改为
<attribute name="dp" value="$once{new lz.Datapointer()}" />
使用DHTML运行时和Chrome = false在Chrome中编译应用程序。您应该在JavaScript控制台中看到以下错误:
此行失败:
this.setAttribute("dp",new (lz.Datapointer)())
您甚至可以通过在控制台中输入 new(lz.Datapointer)来重现错误。
答案 1 :(得分:2)
就像信息一样:类名的情况在4.0中是“正规化的”,因此实现标记的类的情况与该标记相同。请参阅Mapping Class and Tag Names。
答案 2 :(得分:0)
以下是问题的示例和解决方法:
1)问题:
以下是展示问题的简短OpenLaszlo应用程序的代码:
<canvas width="1000" height="584">
<view name="myContainer" width="500" height="500">
<handler name="oninit">
var objCB = new lz.combobox(this);
</handler>
</view>
</canvas>
在该示例中,没有&lt;组合框&gt;应用程序中的标记,因此编译器认为它不需要包含OpenLaszlo&lt; combobox&gt;应用程序中的类代码。因此,当我们尝试使用“var objCB = new lz.combobox(this)”行来实例化组合框时;编译器抛出以下错误:
ERROR @test1007error.lzx≈5:TypeError:错误#1007:实例化 尝试了非构造函数。
2)解决方法:
问题的解决方案是在您的应用程序中为&lt; combobox&gt;添加一个包含:
<canvas width="1000" height="584">
<include href="lz/combobox.lzx" />
<view name="myContainer" width="500" height="500">
<handler name="oninit">
var objCB = new lz.combobox(this);
</handler>
</view>
</canvas>
这次没有抛出错误,我们看到组合框出现在应用程序的左上角。