2

私のフラッシュ アプリケーションには、Scrollpanes を使用する複数のウィンドウがあります。これらの scrollDrag プロパティは、その機能が必要なため true に設定されています。これらの「ウィンドウ」の 1 つを (アプリケーション内で) 閉じて別のウィンドウを開くと、ログにこのエラーが大量に表示されるようです。

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at fl.containers::ScrollPane/endDrag()

時々私は何千ものこれらを取得します.これはおそらく私のアプリを少し遅くしていると思いますが、それ以外は問題を引き起こしていません. scrollpane の Adob​​e コードを見ると、endDrag は非常に単純です。

protected function endDrag(event:MouseEvent):void {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
    }

ここで null になる可能性があるのはステージ変数だけです。

私が考えられる唯一のことは、アプリケーションのウィンドウが閉じる前に scrollDrag=false を設定して、何もイベントをリッスンしないようにすることです。他の提案はありますか?

4

4 に答える 4

3

誰かがまだ解決策を探している場合に備えて、私にとってうまくいったのは、ScollPaneクラスをサブクラス化し、endDrag関数をオーバーライドすることでした。

package {
import fl.containers.*;
import flash.events.*;
public class ScrollPain extends ScrollPane {
    protected override function endDrag(event:MouseEvent):void {
        if (stage) {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
        }
    }
}

}

これについては、FlashKitフォーラムでdawsonkに完全にクレジットされています。FlashKitスレッドリンク。

于 2013-01-15T06:38:52.570 に答える
3

私はあなたのシナリオを再作成しようとしたので、ScrollPane によって読み込まれるダミー クリップがあり、ScrollPane にはリンケージ (Actionscript のエクスポート) を持つ MovieClip が含まれているため、いくつかのインスタンスを作成できます。また、そのクリップでは、ScrollPane コンポーネントの上のレイヤーに閉じるボタンを配置しました。

私の最初の試みは、fla をデバッグして、正確に最初に失敗する場所を確認することでした。これを取得し続けたので、これが何かを見つけることができませんでした:

Cannot display source code at this location.

次に、あなたの指示に従って、 endDrag() 関数を見つけました。私はこれを次のように変更しました:

protected function endDrag(event:MouseEvent):void {
            if(stage) stage.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
        }

で、やってみた。コンパイルされていないかのように、最初は機能しませんでした。私は Flash IDE 内でクラスを編集しようとしましたが、この小さな警告が何であるかを理解しました。これが私が意味することです:

ScrollPane編集

そこで、ScrollPane.as を Flash CS4 フォルダーから ./fl/containers/ScrollPane にコピーしました (基本的には .fla に対して)。この .as ファイルはコンパイルされ、エラーはなくなりました。

ショートバージョンは:うん!問題の場所を見つけました:)クイックフィックスとしてnullオブジェクトをチェックするifを追加し、再度コンパイルする前に.flaファイルまたはクラスパスに相対的にScrollPane.asを保存することを忘れないでください。

HTH、ジョージ

于 2010-03-20T04:04:27.500 に答える