2

最近、コードの一部をOL3.3からOL5.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()
4

3 に答える 3

2

情報のポイントとして:4.0ではクラス名のケースが「正則化」されたため、タグを実装するクラスのケースはそのタグと同じになります。クラス名とタグ名のマッピングを参照してください。

于 2012-08-29T15:38:04.323 に答える
2

これは、定義されていないクラスをインスタンス化しようとしたときに表示されるエラーメッセージです。次に例を示します。

<canvas>

  <class name="myclass">
    <handler name="oninit">
      // Instantiate a class which is not defined
      var x = new lz.missingclass();
    </handler>
  </class>

  <myclass />

</canvas>

スクリプトを介してインスタンス化されているクラスの欠落している<includes>を確認します。AdoboeFlashランタイムエラーのリストもいつでも確認できます。ここに役立つ情報が含まれている場合もあります。

編集:問題の解決策が追加されました
このコメントは問題を指摘しました:

この行が問題の原因であることがわかりました。<attribute name="dp" value="$once{new lz.Datapointer()}" />。なぜですか?

5.0のOpenLaszloリファレンスを確認すると、クラス名(クラスブラウザの左側)で大文字と小文字が異なることがわかります。一部のクラスはキャメルケース(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>

クラスの正しい名前をテストする良い方法は、lzのオートコンプリートがあるDHTMLランタイムのコンソールでJavaScriptを使用することです。クラス名:

ブラウザのJavaScriptコンソールでのLZXクラス名のオートコンプリート

OpenLaszloでのSWF#1007エラーのデバッグSWF
ランタイムで#1007エラーが発生した場合は、デバッガーを無効にしてJavaScriptエラーコンソールを開いた状態でDHTML用のアプリケーションをコンパイルします。これを試して:

  1. $once{}制約のある行をに変更します

    <attribute name="dp" value="$once{new lz.Datapointer()}" />

  2. DHTMLランタイムとdebug=falseを使用して、Chromeでアプリをコンパイルします。JavaScriptコンソールに次のエラーが表示されるはずです。

JavaScriptコンソールの未定義クラスのエラー

  1. error-1007.lzx:3の右側をクリックすると、生成されたJavaScriptコードと、エラーの原因となっている行が表示されます。

OpenLaszloコンパイラによって生成されたコードのJavaScriptエラー

この行は失敗します:

this.setAttribute("dp",new (lz.Datapointer)())

また、コンソールにnew(lz.Datapointer)と入力して、エラーを再現することもできます。

于 2012-08-24T09:54:03.487 に答える
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>

この例では、アプリケーションに<combobox>タグがないため、コンパイラーは、アプリケーションにOpenLaszlo<combobox>クラスコードを含める必要はないと考えています。したがって、「var objCB = new lz.combobox(this);」という行でコンボボックスをインスタンス化しようとすると、コンパイラは次のエラーをスローします。

エラー@test1007error.lzx≈5:TypeError:エラー#1007:非コンストラクターでインスタンス化が試行されました。

2)回避策:

この問題の解決策は、<combobox>のアプリケーションにインクルードを追加することです。

<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>

今回はエラーはスローされず、実行するとアプリケーションの左上にコンボボックスが表示されます。

于 2012-08-24T16:29:30.807 に答える