以编程方式关闭AIR应用程序

5

我希望了解正确的方法来以编程方式关闭AIR应用程序。

在我的Spark WindowedApplication中,有以下内容:

this.addEventListener( Event.CLOSING, shutdownApp );

当然,还需要实现shutdownApp方法(主要清理临时文件)。

这对于窗口右上角的关闭按钮很好用。但是,我还有需要关闭应用程序的功能。在代码中,我调用了:

NativeApplication.nativeApplication.exit();

然而,这并不会触发Event.CLOSING方法,因此我的临时文件没有被清除。我是否不应该调用nativeApplication.exit?如果不是,我应该调用什么?我宁愿不必在NativeApplication.exit()之前调用我的shutdownApp方法,因为这样做感觉不太优雅。

有人能说明正确的做法吗?

谢谢,

Phil

3个回答

7

我知道这个问题已经有答案并被接受,但是我想分享一下,我使用的是。

stage.nativeWindow.close();

太好了!这是唯一一个对我有效的解决方案,谢谢! - Florin Mircea

4

关于这个问题,文档有些模糊不清,我也会有和你一样的理解。你尝试过在WindowedApplication上使用close或exit方法吗?

类似这样,使用FlexGlobals和topLevelApplication:

(FlexGlobals.topLevelApplication as WindowedApplication).close();

或者

(FlexGlobals.topLevelApplication as WindowedApplication).exit();

1
当我第一次尝试时,我遇到了一个TypeError: Error #1009: Cannot access a property or method of a null object reference。这是因为我导入了MX WindowedApplication而不是Spark。你的建议起作用了(我使用了close())。谢谢! - Phil

1
由于我搜索相关问题时没有找到合适的答案,因此请您在此处提供一个答案。 我想做类似的事情,即当文档窗口(spark.components.Window)的本机关闭按钮被按下时,关闭AIR应用程序,尽管spark WindowedApplication容器(应用程序的主窗口)仍然处于活动状态以保持和管理本机菜单(在应用程序启动时也用于显示闪屏)。它必须保持打开状态,因为如果关闭它,则本机菜单将不会显示或无法访问,因此它的可见属性仅设置为false。 我的主要问题是窗口关闭事件。 使用ActionScript进行注册,如下所示:
      this.addEventListener(Event.Closing, windowClosed);

无法工作:未分派关闭事件。唯一的方法是在MXML文件开头直接在s:Window元素中注册事件处理程序。我只是添加了closing属性:
      closing="window1_closingHandler(event)"

事件已经被分派,然后在window1_closingHandler函数中我调用了它。
      NativeApplication.nativeApplication.exit();

那对我来说可以,并关闭整个应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接