Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 为什么browseForOpen无法显示文件对话框,但在调用时却声称它已打开?_Actionscript 3_Winapi_Air - Fatal编程技术网

Actionscript 3 为什么browseForOpen无法显示文件对话框,但在调用时却声称它已打开?

Actionscript 3 为什么browseForOpen无法显示文件对话框,但在调用时却声称它已打开?,actionscript-3,winapi,air,Actionscript 3,Winapi,Air,我正试图用file.browseForOpen打开一个文件对话框。大多数情况下,它都可以工作,但在非常罕见的情况下(例如在会议中),文件浏览器不会出现,也不会阻塞(作为一种模式应该) 如果我在这一点上按下调用代码的按钮,那么我会得到一个错误,它表明“只能有一个” 没有子窗口,即使最小化了主窗口,我也找不到文件对话框,但错误坚持它是打开的。我编写了一些代码,当调用上面的代码时禁用了按钮,然后在任何事件中启用它,但当出现此错误时,按钮将永久禁用 还有10000行代码,其中一些即使在文件浏览器打开时也

我正试图用file.browseForOpen打开一个文件对话框。大多数情况下,它都可以工作,但在非常罕见的情况下(例如在会议中),文件浏览器不会出现,也不会阻塞(作为一种模式应该)

如果我在这一点上按下调用代码的按钮,那么我会得到一个错误,它表明“只能有一个”

没有子窗口,即使最小化了主窗口,我也找不到文件对话框,但错误坚持它是打开的。我编写了一些代码,当调用上面的代码时禁用了按钮,然后在任何事件中启用它,但当出现此错误时,按钮将永久禁用

还有10000行代码,其中一些即使在文件浏览器打开时也会继续运行。它们似乎都与文件浏览器无关,因此我将以下代码移动到一个新项目中进行测试,但无法复制该错误

var filter:FileFilter = new FileFilter("Image/Video", "*.jpg;*.png;*.mp4;");
var imagesFilter:FileFilter = new FileFilter("jpg/png", "*.jpg;*.png");
var docFilter:FileFilter = new FileFilter("mp4", "*.mp4;");
var filters:Array = [filter, imagesFilter, docFilter];

var fileBrowser:File = File.userDirectory;
fileBrowser.addEventListener(FileListEvent.SELECT_MULTIPLE, onFileSelected);
fileBrowser.addEventListener(Event.CANCEL, clean);
fileBrowser.addEventListener(IOErrorEvent.IO_ERROR, clean);
fileBrowser.browseForOpen("Select Slides", filters);
有人知道什么能让我免于“大海捞针”的彻底搜查吗?还有其他人经历过同样的问题吗?在搜索“文件对话框打开但不可见”或搜索的30多种变体(包括“文件对话框未打开”)时,我找不到任何解决方案

最后,如果我检测到用户正在与主窗口交互,而主窗口应该被阻止,是否有办法强制关闭文件对话框?就像绷带一样,如果问题得不到解决(我知道会破坏模态流,但模态流在这一点上已经被破坏了)

更新:

在删除一个类并用一个效率较低的urlMonitor替换它之后,问题似乎消失了。 如果有人能找出哪里出了问题,那么我会把你的答案标记为完整。 我删除的类似乎完全不相关,但我将显示代码:

package reuse.Network
{
    import flash.desktop.NativeApplication;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IOErrorEvent;
    import flash.events.StatusEvent;
    import flash.events.TimerEvent;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.utils.Timer;

    import air.net.URLMonitor;

    [Event(name="networkStatusChanged", type="reuse.Network.CheckInternetEvent")]
    public class NetStatusMonitor extends EventDispatcher
    {
        private var url:String;
        private var urlMonitor:URLMonitor;

        public function NetStatusMonitor(url:String = 'http://www.adobe.com')
        {
            super();
            this.url = url;
        }

        protected function onNetwork_ChangeHandler(event:Event):void
        {
            checkWebsite(url, dispatchStatus);
        }

        /**
         * Checks a specific website for connectivity.
         * @param uri URI of the website to check for a response from
         * @param result Function which accepts a bool as a response.
         * @param idleTimeout How many milliseconds to wait before timing out
         */
        public function checkWebsite(uri:String, result:Function, idleTimeout:Number = NaN):void
        {
            var timeout:Timer;
            var request:URLRequest = new URLRequest(uri);

            if(!isNaN(idleTimeout))
            {
                request.idleTimeout = idleTimeout;

                timeout = new Timer(request.idleTimeout + 1000, 1);
                timeout.addEventListener(TimerEvent.TIMER_COMPLETE, failed);
                timeout.start();
            }

            var loader:URLLoader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.TEXT;
            loader.addEventListener(Event.COMPLETE, complete);
            loader.addEventListener(IOErrorEvent.IO_ERROR, failed);
            loader.load(request);

            function complete():void
            {
                result(true);
                cleanup();
            }

            function failed(e:*):void
            {
                result(false);
                cleanup();
            }

            function cleanup():void
            {
                if(timeout)
                {
                    timeout.stop();
                    timeout.removeEventListener(TimerEvent.TIMER_COMPLETE, failed);
                    timeout = null;
                }

                loader.close();
                loader.removeEventListener(Event.COMPLETE, complete);
                loader.removeEventListener(IOErrorEvent.IO_ERROR, failed);
                loader = null;
            }
        }

        public function start():void
        {
            checkWebsite(url, dispatchStatus, 5000);

            if(!NativeApplication.nativeApplication.hasEventListener(Event.NETWORK_CHANGE))
                NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, onNetwork_ChangeHandler);

            if(urlMonitor == null)
            {
                var request:URLRequest = new URLRequest(url);
                urlMonitor = new URLMonitor(request);
                urlMonitor.pollInterval = 30;
            }

            if(!urlMonitor.hasEventListener(StatusEvent.STATUS))
                urlMonitor.addEventListener(StatusEvent.STATUS, onNetStatus_ChangeHandler);

            if(!urlMonitor.running)
                urlMonitor.start();
        }

        public function stop():void
        {
            if(urlMonitor)
            {
                if(urlMonitor.running)
                    urlMonitor.stop();

                if(urlMonitor.hasEventListener(StatusEvent.STATUS))
                    urlMonitor.removeEventListener(StatusEvent.STATUS, onNetStatus_ChangeHandler);

                urlMonitor = null;
            }
        }

        private function onNetStatus_ChangeHandler(event:StatusEvent):void
        {
            dispatchStatus(urlMonitor.available);
        }

        private function dispatchStatus(status:Boolean):void
        {
            dispatchEvent(new CheckInternetEvent(CheckInternetEvent.NETWORK_STATUS_CHANGED, status));
        }
    }
}

任何熟悉Raja Jaganathan的人都可能会从

中认出这个类。我将此作为一个bug发布到Adobe,并添加了以下注释:

亚历克斯·雷基什

格林尼治时间下午11:06:11+2016年4月12日00:00

我已经看到了这个问题并找到了解决方法。你需要删除 侦听器、强制取消和为您指定的前一个文件对象设置null 浏览打开方法

previousBrowseFile.removeEventListener(Event.SELECT, (选出的);previousBrowseFile.removeEventListener(Event.CANCEL, 文件(已取消);previousBrowseFile.cancel();previousBrowseFile=null