gpt4 book ai didi

apache-flex - 加载和运行现有 AIR swf 的 AIR 应用程序

转载 作者:行者123 更新时间:2023-12-02 02:34:45 25 4
gpt4 key购买 nike

我有一个现有的 AIR 应用程序,其主要内容是 App.swf。我想要另一个托管和运行 App.swf 的 AIR 应用程序。当我说运行它时,我的意思是显示它是 WindowedApplication。

这是 2 个 AIR 项目的代码(为简洁起见省略了导入):

// App AIR Project -> App.mxml -> App.swf (it's just a window)
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
public function doSomething():void {
trace("doSomething called");
}
]]>
</mx:Script>
</mx:WindowedApplication>

// AirAppHostApplication AIR Project -> AirAppHostApplication.mxml -> AirAppHostApplication.swf
<?xml version="1.0" encoding="utf-8"?>
<custom:AirAppHostApplication xmlns:custom="components.*" />

// components/AirAppHostApplication.as
public class AirAppHostApplication extends WindowedApplication
{
private var ldr:Loader;

public function AirAppHostApplication()
{
addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete);
}

private function handleComplete( event : FlexEvent ) : void
{
loadSwf("App.swf");
}

private function loadSwf(swf:String):void {
ldr = new Loader();
var req:URLRequest = new URLRequest(swf);
var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.load(req, ldrContext);
}

private function completeHandler(event:Event):void {
var appSystemManagerCls:* = ApplicationDomain.currentDomain.getDefinition("_app_mx_managers_SystemManager") as Class;
var appSystemManagerInstance:* = new appSystemManagerCls(Application.application);
var appInstance:WindowedApplication = appSystemManagerInstance.create();
appInstance.activate();
appInstance.doSomething();
}
}

我在加载 App.swf 时收到以下错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.managers::SystemManager/initHandler()[C:\autobuild\galaga\frameworks\projects\framework\src\mx\managers\SystemManager.as:3001]

我认为问题与 AirAppHostApplication 的 SystemManager 与 App 的 SystemManager 冲突有关,因为它们都位于同一个应用程序域中。是否可以在 WindowedApplication 类未静态定义但在运行时通过加载 swf 并实例化包含在 swf 中的 WindowedApplication 子类来加载 AIR 应用程序。

我想这样做的原因是为了一个自动化场景,我必须假设我没有我正在自动化的应用程序的源代码,但我确实可以访问公共(public)类的名称及其为自动化公开的公共(public)方法。我可以完全控制环境并且不必处理任何限制,所以我可以将 2 个 AIR 应用程序放在同一个目录中,等等。

这可能吗?

最佳答案

是的,这是可能的。看看http://blog.everythingflex.com/2009/06/08/open-an-air-application-from-a-2nd-air-application/

它被称为从第二个 AIR 应用程序打开一个 AIR 应用程序。

它说:

两者都需要的一件事是您尝试启动的应用程序将 AIR 配置文件中的 allowBrowserInvocation 属性设置为 true 并且该应用程序已安装在您的系统上。

您还必须知道应用程序的 ID 和发布者的 ID。例如,在我的 LauncherSample 中,AIR 配置文件中定义的应用程序 ID 是:

plus 告诉我们如何做到这一点。

这是 Adob​​e 对错误的描述。

错误 1009 无法访问空对象引用的属性或方法。

计算结果为 null 的对象不能有任何属性。在某些意外(尽管有效)的情况下可能会发生此错误。例如,考虑以下创建 Sprite 对象的代码。因为此 Sprite 对象从未添加到显示列表(通过 DisplayObjectContainer 对象的 addChild() 方法),所以它的 stage 属性设置为 null。因此,该示例会生成此错误,因为 Sprite 对象的 stage 属性不能具有任何属性:

import flash.display.Sprite;
var sprite1:Sprite = new Sprite();
var q:String = sprite1.stage.quality;

关于apache-flex - 加载和运行现有 AIR swf 的 AIR 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2294091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com