2

申し訳ありませんが、Adobe Airを初めて使用するので、理由がわかりません。

addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);

addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDragDrop);

行が登録されていません。「未定義のメソッドaddEventListenerを呼び出す」というエラーが表示されます。

アプリケーションをロードしようとしていますが、次のコード例を使用しています:http: //www.mikechambers.com/blog/2007/11/07/air-example-native-drag-and-drop/

これは私のDragAndDropExampleClass.asです:http://pastebin.com/SNZyW5Cx

前もって感謝します!

4

1 に答える 1

1

Mike Chamberの例では、ファイル内のコードはDragAndDropExampleClassインラインコードとして使用されることを意図しており、実際のクラスではありません。

そのため、パッケージ/クラスディレクティブを削除しました。これで、(コメントトレイルで説明されているように)発生していた問題が解決されたはずです。

ただし、スクリプトタグにインラインでコードを含める<mx:Script source="DragAndDropExampleClass.as" />ことは悪い習慣であり、おそらく混乱を招きます。私はあなたの2つのファイルを取り、それらを以下の1つのアプリケーションに結合しました。これは、Mike Chambersの例と文字通り同じですが、1つのファイルにまとめられています。多分これは役立つでしょう。このアプリケーションを実行しましたが、動作します。

注:Flash Builder 4.6でコンパイルしたため、コードが少し異なります。Flex 3を使用している場合は、私と同じようにMikeの2つのコードを組み合わせてみてください。

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       creationComplete="onCreationComplete()">
    <fx:Script>
        <![CDATA[
            import flash.desktop.ClipboardFormats;
            import flash.desktop.NativeDragManager;
            import flash.display.Sprite;
            import flash.events.NativeDragEvent;
            import flash.filesystem.File;
            import flash.filesystem.FileMode;
            import flash.filesystem.FileStream;

            //called when app has initialized and is about to display
            protected function onCreationComplete():void
            {
                //register for the drag enter event
                addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);

                //register for the drag drop event
                addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDragDrop);
            }

            //called when the user drags an item into the component area
            protected function onDragIn(e:NativeDragEvent):void
            {
                //check and see if files are being drug in
                if(e.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT))
                {
                    //get the array of files
                    var files:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;

                    //make sure only one file is dragged in (i.e. this app doesn't
                    //support dragging in multiple files)
                    if(files.length == 1)
                    {
                        //accept the drag action
                        NativeDragManager.acceptDragDrop(this);
                    }
                }
            }

            //called when the user drops an item over the component
            protected function onDragDrop(e:NativeDragEvent):void
            {
                //get the array of files being drug into the app
                var arr:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;

                //grab the files file
                var f:File = File(arr[0]);

                //create a FileStream to work with the file
                var fs:FileStream = new FileStream();

                //open the file for reading
                fs.open(f, FileMode.READ);

                //read the file as a string
                var data:String = fs.readUTFBytes(fs.bytesAvailable);

                //close the file
                fs.close();

                //display the contents of the file
                outputField.text = data;
            }
        ]]>
    </fx:Script>


    <mx:TextArea top="10" right="10" bottom="10" left="251"
                 id="outputField" />
    <mx:Text text="Drag a Text File into the Application"
             width="233" height="148" top="11" left="10"/>
</s:WindowedApplication>
于 2012-09-07T17:55:45.480 に答える