我一直在尝试加载一个文本文件几个小时,但我仍然被困住了。名为 Pi.txt 的文本文件包含许多Pi编号的数字。所以我写了一个名为 PiLoader 的类来加载文件:
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 中,我追踪了Pi编号的3位数字:
package Action
{
import flash.display.Sprite;
import Pi.PiLoader;
public class Main extends Sprite
{
public function Main()
{
trace(PiLoader.getPi().substring(0, 4));
}
}
}
但我总是得到这个:错误#1009:无法访问空对象引用的属性或方法。我发现 PiLoader 类中的函数 onLoaded()永远不会被调用。这就是我得到那个错误的原因。 需要你的帮助。感谢。
答案 0 :(得分:0)
您的Error #1009
被解雇是因为PiLoader
为空,这是正常的。但在这里我想讨论使用的方法。您应该知道在代码中未调用的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);
}
}
}
希望能帮到你。