使用swfloader加载SWF出现TypeError: Error #1009: 无法访问空对象引用的属性或方法。

coreyhsu2020 2013-08-17 04:40:13
RT,具体的代码如下:

Code
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var mc:MovieClip;

private function init():void
{
mc = swf.content as MovieClip;
}
private function prev(evt:MouseEvent):void
{
if (mc.currentFrame>1)
{
mc.gotoAndStop(mc.currentFrame-1);
}
}
private function next(evt:MouseEvent):void
{
mc = swf.content as MovieClip;
if (mc.currentFrame<mc.framesLoaded)
{
mc.gotoAndStop(mc.currentFrame+1);
}
}
]]>
</mx:Script>
<mx:SWFLoader id="swf" source="assets\test.swf" complete="init()">
</mx:SWFLoader>
<mx:Canvas id="cav" backgroundColor="#FFB5B5" backgroundAlpha="0.1">
</mx:Canvas>
<mx:Button x="603" y="10" label="上一页" fontSize="12" click="prev(event)"/>
<mx:Button x="603" y="40" label="下一页" fontSize="12" click="next(event)"/>
<mx:Label x="603" y="72" fontSize="12" id="lblCount"/>
<mx:Button x="603" y="100" label="Button"/>
</mx:Application>


运行然后点 下一页就会出现:


TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at testswfpage/next()[E:\workspace\as\test\src\testswfpage.mxml:46]
at testswfpage/___testswfpage_Button2_click()[E:\workspace\as\test\src\testswfpage.mxml:78]

” 这个错误,求大神指点啊。
...全文
421 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
coreyhsu2020 2013-08-19
  • 打赏
  • 举报
回复
引用 2 楼 jayxujia123 的回复:
我这样做了之后依然显示为空:
补充下,SWF现在不是空的,那个SWF为空的没有谈出来,仅有MC为空
coreyhsu2020 2013-08-19
  • 打赏
  • 举报
回复
我这样做了之后依然显示为空:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
                          			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>


	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			private var mc:MovieClip;
			
			private function init():void
			{
				if(swf == null){
					Alert.show("空的哦");
				}
				mc = swf.content as MovieClip;
				startbtn.addEventListener(MouseEvent.CLICK,swfIsNull);
			}	
			
			private function swfIsNull(evt:MouseEvent):void{
				if(mc == null){
					Alert.show("鼠标监听事件显示MC为空");
				}
			}
			private function prev(evt:MouseEvent):void
			{
				if (mc.currentFrame>1)
				{
					mc.gotoAndStop(mc.currentFrame-1);
				}
			}
			private function next(evt:MouseEvent):void
			{
				//mc = swf.content as MovieClip;
				if (mc.currentFrame<mc.framesLoaded)
				{
					mc.gotoAndStop(mc.currentFrame+1);
				}
			}
		]]>
	</fx:Script>
		<mx:SWFLoader id="swf" source="assets\newfile.swf" complete="init()">
		</mx:SWFLoader>
		<mx:Canvas id="cav" backgroundColor="#FFB5B5" backgroundAlpha="0.1">
		</mx:Canvas>
		<mx:Button x="603" y="10" label="上一页" fontSize="12" click="prev(event)"/>
		<mx:Button  x="603" y="40" label="下一页" fontSize="12" click="next(event)"/>
		<mx:Label x="603" y="72" fontSize="12" id="lblCount"/>
		<mx:Button x="603" y="100" label="Button" id="startbtn"/>
	
</s:Application>
感觉好像SWF始终没有加载进来一样,不知道为什么,但是那个MC舒初始化的语句确实是那么写的额,蛋疼了啊
xuefeimengli2007 2013-08-19
  • 打赏
  • 举报
回复
把你的代码理顺, 你complete调用init,init里面给MC赋值,点next后,第一步又是给mc赋值,那你init有什么用? 顺序应该是,complete调用init,在init中初始化mc,注意赋值时,应该先判断变量“swf”是否为null,而不要一上来就swf.content,然后在init中给按钮添加鼠标监听事件,原因是防止SWF没有加载完时就点击了按钮,而在按钮的监听事件中,仍然需要判断mc是否为空
xuefeimengli2007 2013-08-19
  • 打赏
  • 举报
回复
尝试下使用 mc = swf.getChildByName("content") as MovieClip;

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧