2011-06-11 96 views
0

我的问题很简单,但我找不到它的任何答复中网,也许这是不可能做到的......在实际的GUI显示的ActionScript控制台输出

的事情是,我有一个ActionScript 3.0应用程序,并且希望包含一个显示所有trace()调用等的单行大小文本框,这些都显示在控制台中。

有没有人知道它是如何做到的?我真的很感激它,因为我有一个完整的项目,其中有我想要展示的痕迹,而现在当我完成后,我意识到我不知道该怎么做:P

当然,并不是所有的东西都丢失了,因为我可以做我自己的类,它显示了那里的消息,但它会更干净,而且不必为我的新类和方法取代所有trace()调用。

此致敬意:)

回答

0

我刚刚在上周做了这个。

有Flex的日志框架。但令人遗憾的是,Flex的日志记录只能在调试模式下工作。如果您搜索SO进行Flex记录,您会发现各种建议。他们都不是很棒,海事组织。

最后,我通过创建一个带有静态函数的Log类来实现自己的功能,该函数充当trace的代理。

喜欢的东西:

public static myTrace(... args) : void { ... } 

然后你只需向前参数传递给trace也给你想要的任何其他目的(如字符串+日期数组),然后可以在日志窗口中显示。

顺便提一下,我还使用SwfAddress来触发日志窗口,只要某个参数添加到URL中。非常便利。

哦,到底是什么......这是班级。它只保留最后100个字符串,并且还有一个“转储”功能,如果要将数据发送到服务器或只是快速打印整个历史记录,则可以调用该功能。

public class Log 
{ 
    public static var lines : ArrayList = new ArrayList(); 
    public static const MAX_LINES : int = 100; 

    private static function logLine(line : String) : void 
    { 
     while (lines.length > MAX_LINES) 
      lines.removeItemAt(0); 
     lines.addItem({"line" : line, "time" : new Date()}); 
    } 

    public static function logDump() : String 
    { 
     var ret : String = ""; 
     for each (var entry : Object in lines.source) 
     { 
      ret = (entry.time as Date).toUTCString() + " " + entry.line + "\n" + ret; 
     } 
     return ret; 
    } 

    public static function debug(...args) : void 
    { 
     trace(args); 

     var line : String = ""; 
     for (var i : int = 0; i < args.length; i++) 
      if (args[i] != null) 
       line += args[i].toString(); 
     logLine(line); 
    } 
} 
+0

HI!感谢您的快速和扩展答案:) 您确认我在想什么..我需要使用我自己的代理方法。如果可以,我将以您为例:P 再次感谢! – pepillo 2011-06-11 12:50:36