Как исправить ошибку 1009 при вызове функции внутри другой функции

Я разрабатываю файловый менеджер, который подключается к FTP-серверам, используя мой собственный класс 'ServConnect'. Я получаю сообщение об ошибке # 1009 при вызове downloadFTPIcon (); функция внутри слушателя myListenerFunctionreq. Фактическая функция (downloadFTPIcon) находится вне функции myListenerFunctionreq. это в том же кадре, что и другая функция.

Я попытался отключить функцию, удалив обязательный параметр String. Я также попытался объединить функции.

function fetchFTPIcon():void { var reqFTP:ServConnect; reqFTP = new ServConnect(curObj._server, curObj._user, curObj._pass, curObj._port); reqFTP.listener = myListenerFunctionreq; ico.gotoAndStop(10); var isError:Boolean = false; function myListenerFunctionreq(e):void { if (e.type == "loginSuccess") { //if(MovieClip(parent).curNetworkDirPath.slice(0,2) == "//") { //trace(String("is double slash "+MovieClip(parent).curNetworkDirPath.slice(1, MovieClip(parent).curNetworkDirPath.length))+"/"+globalNetworkName) //reqFTP.showFile(String(MovieClip(parent).curNetworkDirPath.slice(1, MovieClip(parent).curNetworkDirPath.length))+"/"+globalNetworkName); //} else { //trace(String("no double slash "+MovieClip(parent).curNetworkDirPath.slice(1, MovieClip(parent).curNetworkDirPath.length))+"/"+globalNetworkName) reqFTP.showFile("/ServConnectMeta.xml"); //} } else if (e.type == "error" || e.type == "directoryFaild") { reqFTP.closeWhenReady(); isError = true; ico.gotoAndStop(7); } else if (e.type == "gotFile") { if(!isError) { //fileBA = e.byteArray; //ico.image.loadFromBytes(e.byteArray); reqFTP.closeWhenReady(); var curMetaFile:XML = XML(e.str); if(curMetaFile.hasOwnProperty("icon")) { if(String(curMetaFile.icon).length > 2) { iconLocNetwork = curMetaFile.icon.toString(); downloadFTPIcon(); } else { ico.gotoAndStop(7); } } else { ico.gotoAndStop(7); } } } else if (e.type == "gotFileSize") { trace("GOT FILE SIZE! == "+e.str); } else if (e.type == "progress") { //trace(e.msg); } } } function downloadFTPIcon():void { var reqFTP:ServConnect; ... 

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at Function/sidebarEntry/fetchFTPIcon/myListenerFunctionreq()[sidebarEntry::frame1:81]
    at com.alwinlubbers::ServConnect/_listener()[/Volumes/Bestanden/AlwinLubbers Edit/ServConnect Server/com/alwinlubbers/ServConnect.as:655]
    at Function/com.alwinlubbers:ServConnect/private:onReceivedSCmd/com.alwinlubbers:timerDone()[/Volumes/Bestanden/AlwinLubbers Edit/ServConnect Server/com/alwinlubbers/ServConnect.as:187]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()

Всего 1 ответ


ОБНОВЛЕНИЕ: я переписал код, и теперь все работает отлично.

function fetchFTPIcon():void {
if(currentlyActive) {
    var propFound:Boolean = false;

    for (var i:uint; i < MovieClip(root).uploadTasks.length; i++) {
        if(Object(MovieClip(root).uploadTasks[i]).displayName == "FTP details "+naam.text+" opvragen...") {
            propFound = true;
        }
    }

    if(!propFound) {
        var uplTask:Object = new Object();
        uplTask.hasPriority = true;
        uplTask.displayName = "FTP details "+naam.text+" opvragen...";
        uplTask.origin = "fetchFTPIcon";
        uplTask.appNaam = "Bestanden";
        uplTask.icon = "files";
        uplTask.running = true;

        MovieClip(root).uploadTasks.push(uplTask);
    }
}

if(currentlyActive) {
    var reqFTP:ServConnect;
    reqFTP = new ServConnect(curObj._server, curObj._user, curObj._pass, curObj._port);
    reqFTP.listener = myListenerFunctionreq;
    ico.gotoAndStop(10);
}

var isError:Boolean = false;

function myListenerFunctionreq(e):void {
    if (e.type == "loginSuccess") {
        if(currentlyActive) {
            reqFTP.showFile("/ServConnectMeta.xml"); 
        }
    } else if (e.type == "gotFile") {
        if(currentlyActive) {
            reqFTP.closeWhenReady();
            trace("got File!!!!!!!!!!!!!! FTP NAME == "+naam.text+" && "+e.str);
            var metaXML:XML = XML(e.str);
            if(metaXML.hasOwnProperty("icon")) {
                if(String(metaXML.icon).length > 3) {
                    trace("got icon Now downloading!!!!!!!!!!!!!! FTP NAME == "+naam.text);
                    var icoLoc:String = metaXML.icon;
                    var icoFTP:ServConnect;
                    icoFTP = new ServConnect(curObj._server, curObj._user, curObj._pass, curObj._port);
                    icoFTP.listener = myListenerFunctionreq;

                    function myListenerFunctionreq(e):void {
                        if (e.type == "loginSuccess") {
                            if(currentlyActive) {
                                icoFTP.showFile(icoLoc); 
                            }
                        } else if (e.type == "gotFile") {
                            if(currentlyActive) {
                                ico.image.loadFromBytes(e.byteArray);
                                trace("Icon downloaded. Now generating...")
                            }
                        } else if (e.code == 550) {
                            if(currentlyActive) {
                                ico.gotoAndStop(7);
                                icoFTP.closeWhenReady();
                            }
                        }
                    }
                }
            }
        }
    } else if (e.code == 550) {
        if(currentlyActive) {
            reqFTP.closeWhenReady();
            ico.gotoAndStop(7);
        }
    }
}

}


Есть идеи?

10000