AIR应用程序中的奇怪崩溃

时间:2012-05-22 12:41:31

标签: actionscript-3 flex air flash

我发生崩溃只发生在安装的应用程序中我无法在IDE中使用cvrash(Flash Builder调试或运行选项)

经过长时间的评论和解析代码后,我发现了问题,我发布了以下代码

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:ns="generic_components.*"
                       creationComplete="windowedapplication1_creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            //import core.Logger;

            import mx.controls.Alert;
            import mx.events.FlexEvent;

            import spark.events.TextOperationEvent;

            protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
            {
                //Logger.init();
            }
            public static function humanFromCamelCase(txt:String):String{

                var res:String=txt.charAt(0);
                //Logger.write("camel case for "+txt);
                for (var i:int=1;i<txt.length;i++) 
                {
                    //  Logger.write("camel iter "+i);
                    var c:String=txt.charAt(i);
                    //Logger.write("camel char is "+c);
                    if(c==c.toUpperCase())
                    {
                        res=res+" "+c;  
                    }
                    else
                        res=res+c;
                }

                return res;
            }


            protected function test_clickHandler(event:Event):void
            {
                Alert.show(humanFromCamelCase("CompanyId"));

            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:layout>
        <s:VerticalLayout />
    </s:layout>
    <s:Button id="test" label="TEST" click="test_clickHandler(event)"/>

</s:WindowedApplication>

另请参阅此处的网络示例http://ploscariu.com/crash/TestWeb.html(将来可能不存在)

这次崩溃有什么奇怪之处: 1我不知道会发生什么

2播放器中常见的崩溃处理程序未显示

3在开发环境IDE中没有崩溃

4如果我取消注释那些Logger.write然后代码在我的机器上工作正常(它不能在所有机器上工作),Logger.write将sting写入文件并放在另一个项目swf中(我没有包括记录器代码) 我,假设对Logger.write的调用可能导致延迟或类似的事情

我的代码有问题或播放器有问题吗?还是编译器? 有任何想法吗?

编辑: - 不是我使用的记录器,因为错误发生在我不使用它时,如示例代码或页面,没有记录器应用程序崩溃

-i从崩溃报告中获取Flash的对话

2 个答案:

答案 0 :(得分:2)

这太奇怪了!我不知道为什么会发生这种情况......但是我有一个解决方法:

而不是res=res+c,请使用res+=c

public static function humanFromCamelCase(txt:String):String{

    var res:String=txt.charAt(0);
    for (var i:int=1;i<txt.length;i++) 
    {
        var c:String=txt.charAt(i);
        if(c === c.toUpperCase())
        {
            res += " " + c;  
        }
        else
            res += c;
    }

    return res;
}

答案 1 :(得分:1)

我不知道你为什么会有错误,但是,我会用这个代替这个函数:

public static function humanFromCamelCase(txt:String):String{
    return txt.replace(/([A-Z])/g, ' $1').replace(/^ /, "");
}

没有测试过,但你明白了。这是一种更简单,更快捷的方法。

我还想到了另一种方式:

public static function humanFromCamelCase(txt:String):String{
    return txt.split(/(?=[A-Z])/).join(' ');
}