2014-12-29 2 views
0

Я пытаюсь загрузить текстовый файл часами, но я все еще застрял. Текстовый файл Pi.txt содержит много цифр номера Pi. Так что я написал класс под названием PiLoader для загрузки файла:AS3: Загрузите/прочитайте текстовый файл

package Pi 
{ 
    import flash.events.Event; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 

    public class PiLoader 
    { 
     private static var piURL:URLRequest = new URLRequest("../src/Pi/Pi.txt"); 
     private static var textLoader:URLLoader = new URLLoader(piURL); 
     private static var pi:String; 

     public function PiLoader() {} 

     public static function getPi():String { 
      textLoader.addEventListener(Event.COMPLETE, onLoaded); 
      return pi; 
     } 

     private static function onLoaded(e:Event):void { 
      var loader:URLLoader = e.target as URLLoader; 
      pi = loader.data; 
     } 

    } 

} 

В Main.as, я проследил первые 3 цифры числа Пи:

package Action 
{ 
     import flash.display.Sprite; 

     import Pi.PiLoader; 

     public class Main extends Sprite 
     { 

      public function Main() 
      { 
      trace(PiLoader.getPi().substring(0, 4)); 
      } 

     } 

} 

Но я всегда получаю this: Ошибка # 1009: Не удается получить доступ к свойству или методу нулевой ссылки на объект. Я узнал, что функция onLoaded() в Класс PiLoader никогда не будет вызван. Вот почему я получаю эту ошибку. Вам нужна ваша помощь. Благодарю.

ответ

0

Ваш Error #1009 уволен, потому что ваш PiLoader имеет значение null, это нормально. Но здесь я хочу обсудить используемый метод. Вы должны знать, что URLLoader.load(), который вы не вызывали в своем коде, является асинхронной операцией, поэтому вам нужно подождать, пока Event.COMPLETE не будет запущен, чтобы использовать возвращаемые данные. В этом случае, вы можете использовать функцию обратного вызова, как это:

Main.as:

package { 

    import flash.display.Sprite; 

    public class Main extends Sprite { 

     private var pi_loader:PiLoader; 

     public function Main() { 

      pi_loader = new PiLoader(); 
      pi_loader.getPi(show_pi); 

     } 

     // your function called only when data is loaded inside the PiLoader 
     private function show_pi(pi:String) { 

      trace(pi.substring(0, 3)); 

     } 

    } 
} 

PiLoader.as:

package { 

    import flash.events.Event; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 

    public class PiLoader { 

     private static var piURL:URLRequest = new URLRequest('path_to_file.txt'); 
     private static var textLoader:URLLoader = new URLLoader(piURL); 

     public function PiLoader() { 
     } 

     public function getPi(callback:Function):void { 

      textLoader.addEventListener(Event.COMPLETE, onLoaded); 
      function onLoaded(e:Event):void { 

       // run our function and give it data 
       callback(e.target.data); 

      } 
      textLoader.load(piURL); 

     } 

    } 

} 

Надежда, которая может помочь вам.

Смежные вопросы