JunXiu

2010年8月27日

为了解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结一下。

总结1:附件参数g的用法

表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义。我们详细叙述:

1)对于表达式对象的exec方法,不加入g,则只返回第一个匹配,无论执行多少次均是如此,如果加入g,则第一次执行也返回第一个匹配,再执行返回第二个匹配,依次类推。例如
var regx=/user\d/;
var str=“user18dsdfuser2dsfsd”;
var rs=regx.exec(str);//此时rs的值为{user1}
var rs2=regx.exec(str);//此时rs的值依然为{user1}
如果regx=/user\d/g;则rs的值为{user1},rs2的值为{user2}
通过这个例子说明:对于exec方法,表达式加入了g,并不是说执行exec方法就可以返回所有的匹配,而是说加入了g之后,我可以通过某种方式得到所有的匹配,这里的“方式”对于exec而言,就是依次执行这个方法即可。

2)对于表达式对象的test方法,加入g于不加上g没有什么区别。

3)对于String对象的match方法,不加入g,也只是返回第一个匹配,一直执行match方法也总是返回第一个匹配,加入g,则一次返回所有的匹配(注意这与表达式对象的exec方法不同,对于exec而言,表达式即使加上了g,也不会一次返回所有的匹配)。例如:
var regx=/user\d/;
var str=“user1sdfsffuser2dfsdf”;
var rs=str.match(regx);//此时rs的值为{user1}
var rs2=str.match(regx);//此时rs的值依然为{user1}
如果regx=/user\d/g,则rs的值为{user1,user2},rs2的值也为{user1,user2}

4)对于String对象的replace方法,表达式不加入g,则只替换第一个匹配,如果加入g,则替换所有匹配。(开头的三道测试题能很好的说明这一点)

5)对于String对象的split方法,加上g与不加g是一样的,即:
var sep=/user\d/;
var array=“user1dfsfuser2dfsf”.split(sep);
则array的值为{dfsf, dfsf}
此时sep=/user\d/g,返回值是一样的。

6)对于String对象的search方法,加不加g也是一样的。

总结2:附加参数m的用法

附加参数m,表明可以进行多行匹配,但是这个只有当使用^和$模式时才会起作用,在其他的模式中,加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字符串),我们举例说明这一点

1)使用^的例子
var regx=/^b./g;
var str=“bd76 dfsdf
sdfsdfs dffs
b76dsf sdfsdf”;
var rs=str.match(regx);
此时加入g和不加入g,都只返回第一个匹配{bd},如果regx=/^b./gm,则返回所有的匹配{bd,b7},注意如果regx=/^b./m,则也只返回第一个匹配。所以,加入m表明可以进行多行匹配,加入g表明可以进行全局匹配,综合到一起就是可以进行多行全局匹配

2)使用其他模式的例子,例如
var regx=/user\d/;
var str=“sdfsfsdfsdf
sdfsuser3 dffs
b76dsf user6”;
var rs=str.match(regx);
此时不加参数g,则返回{user3},加入参数g返回{user3,user6},加不加入m对此没有影响。

3)因此对于m我们要清楚它的使用,记住它只对^和$模式起作用,在这两种模式中,m的作用为:如果不加入m,则只能在第一行进行匹配,如果加入m则可以在所有的行进行匹配。我们再看一个^的例子
var regx=/^b./;
var str=“ret76 dfsdf
bjfsdfs dffs
b76dsf sdfsdf”;
var rs=str.match(regx);
此时rs的值为null,如果加入g,rs的值仍然为null,如果加入m,则rs的值为{bj}(也就是说,在第一行没有找到匹配,因为有参数m,所以可以继续去下面的行去找是否有匹配),如果m和g都加上,则返回{bj,b7}(只加m不加g说明,可以去多行进行匹配,但是找到一个匹配后就返回,加入g表明将多行中所有的匹配返回,当然对于match方法是如此,对于exec呢,则需要执行多次才能依次返回)

总结3:在HTML的textarea输入域中,按一个Enter键,对应的控制字符为“\r\n”,即“回车换行”,而不是“\n\r”,即“换行回车”,我们看一个前面我们举过的例子:
var regx=/a\r\nbc/;
var str=“a
bc”;
var rs=regx.exec(str);
结果:匹配成功,rs的值为:{ },如果表达式为/a\n\rbc/,则不会被匹配,因此在一般的编辑器中一个”Enter”键代表着“回车换行”,而非“换行回车”,至少在textarea域中是这样的。

posted @ 2010-12-30 17:45 junlin 阅读(191) | 评论 (0)编辑 收藏

作在工作中,经常需要远程连接到服务器上,然而在公司里,老总、同事都需要连接到服务器上的,而默认的Win2003操作系统最大连接数是2,这样一来,问题也就来了,常常遇到“终端服务器超出最大连接数”,导致无法正常登陆服务器。下面讲解在网上流传的几种方法,来解决这一问题。

解决方法一:用“注销”方式退出远程桌面,而不是直接关闭窗口;

解决方法二:踢出已经断开的连接用户;

1、首先通过各种方法连接到服务器上(telnet);

2、上去后,查看登陆用户列表。输入命令:query user;

这样你就可以看出有何不同来啦,可以根据你的具体情况而定的。ID为0的用户就是本地登陆的,而在State中看提示,当提示为已断开,则说明用户已经断开还占用着系统资源和通道,这样就可以把该用户踢掉。输入logoff ID,即踢除相应ID的用户。

解决方法三:限制已断开连接的会话存在时间;(推荐)

一般情况下,我们在维护远程服务器时,不可能长时间在线,但是系统默认的却是只要登录就不再断开。因此,我们可以修改这一默认设置,给它指定一个自动断开的时间即可。

可以在 Windows 2003 服务器上通过组策略中设置一下来解决问题:单击“开始 → 运行”,输入“gpedit.msc”,回车后打开组策略窗口,然后依次定位到“计算机配置 → 管理模板 → Windows 组件 → 终端服务 → 会话”,然后在右侧窗口中双击“为断开的会话设置时间限制”,在打开的窗口中将“结束断开连接的会话”时间设置为5分钟,或者设置为空闲就断开。或在远程服务器上打开“运行”窗口,输入“tscc.msc”连接设置窗口。然后双击“连接”项右侧的“RDP-Tcp”,切换到“会话”标签,选中“替代用户设置”选项,再给“结束已断开的会话”设置一个合适的时间即可。

解决方法四:增加连接数量,即设置最大连接数再多些;

默认情况下允许远程终端连接的数量是2个用户,我们可以根据需要适当增加远程连接同时在线的用户数。

单击“开始→运行”,输入 “gpedit.msc”打开组策略编辑器窗口,依次定位到“计算机配置 → 管理模板 → Windows 组件 → 终端服务”,再双击右侧的“限制连接数量”,将其TS允许的最大连接数设置大一些即可。

经过上面两个配置(方法三&方法四),基本上就可以保证远程终端连接时不再受限。但仍有人反映,当前同时只有一个用户进行连接,却提示超出最大允许链接数,这又是什么原因呢?出现这种情况是因为操作不当所造成的。在上一个帐户登录远程桌面后退出时,没有采用注销的方式,而是直接关闭远程桌面窗口,那么导致该会话并没有被释放,而是继续保留在服务器端,占用了连接数,这样就会影响下一个用户的正常登录了。

解决方法五:限制用户会话数;

对Terminal Services进行限制,使得一个用户仅仅能够连接一次。对于Windows Server 2003,请在Terminal Services Configuration(Terminal Services配置)中将“限制每位用户只有拥有一个会话”(Restrict each user to one session)设置为“是”(Yes)。此外,您可以将“限制终端服务用户使用单个远程会话”组策略设置为“启用”。

注意:版本不一样解决的方法有异!

A:这是因为Windows 2003中设置了最大允许连接数限制,而你每次连接后可能没有注销而是直接关闭,导致连接数超过了最大连接数。你可以在Windows 2003 服务器上通过组策略中设置一下来解决问题:单击“开始→运行”,输入 “gpedit.msc”,回车后打开组策略窗口,然后依次定位到“计算机配置 → 管理模板 → 终端服务 → 会话”,然后在右侧窗口中双击“为断开的会话设置时 间限制”,在打开的窗口中将“结束断开连接的会话”时间设置为5分钟。最好的解决方法还是你每次断开连接时通过注销的方式。

B:经常多人管理服务器的朋友一定遇到过当自己终端连接远程计算机的时候却提示“终端连接超出了最大连接”的提示吧?这是因为windows2003仅支持2个终端用户的登陆。当这种情况出现后,多数人选择的是给机房打电话进行重启服务器。可是带来的损失也是显而 易见的。那么我们有什么办法来解决呢?方法当然是有的。我们只需要在一台2003的机器上运行“tsmmc.msc”就可以打开远程桌面连接,在这里我们 添加一个新的连接,输入对方的IP地址帐号和密码后就可以成功登陆到对方的桌面中,这时可以再踢下一个用户。就可以解决终端连接数超过最大的问题。

C:开始 → 控制面版 → 授权里面更改连接数。

 

在命令行:
mstsc /console /v:你的服务器IP:远程端口

例如 :mstsc /console /v:222.222.215.222:3389

win2K/win2003终端服务器超出最大允许连接数解决之道全攻略
原因:用远程桌面链接登录到终端服务器时经常会遇到“终端服务器超出最大允许链接数”诸如此类错误导致无法正常登录终端服务器,引起该问题的原因在于终端服务的缺省链接数为2个链接,并且当登录远程桌面后如果不是采用注销方式退出,而是直接关闭远程桌面窗口,那么实际上会话并没有释放掉,而是继续保留在服务器端,这样就会占用总的链接数,当这个数量达到最大允许值时就会出现上面的提示。
如何避免?
一、用注销来退出远程桌面而不是直接关闭窗口二、限制已断开链接的会话存在时间
1、从终端服务配置中修改
运行-Tscc.msc(终端服务配置)-连接-双击RDP-Tcp或右击-属性-会话-选中第一个的替代用户设置(O)-结束已断开的会话[将默认值“从不”改为一个适当的时间,比如30分钟]
2、从组策略修改
开始-运行-gpedit.msc-计算机配置-管理模板-windows组件-终端服务-会话
右边窗口选择 为断开的会话设置时间限制 -选择已启用,选择一个时间
三、增加最多链接数
1、从终端服务配置中修改:运行-Tscc.msc(终端服务配置)-连接-双击RDP-Tcp或右击-属性,选择“网卡”选项卡-修改“最大连接数”改成你所需的值,当然这个值不也能太大,否则会占用较多的系统资源。不过这里修改的值好像不起作用,设置成无限制时照样还是会出现本文所说的情况。  
2、组策略级别要高于终端服务配置,当启用组策略后终端服务配置中的相应选项会变成灰色不可修改
运行-gpedit.msc-计算机配置-管理模板-Windows组件-终端服务
双击右边的”限制连接数量“-选择”已启用“-填入允许的最大连接数
四、改变远程终端模式
打开“控制面板”,双击“添加删除程序”,单击“添加删除Windows组件”,“组件”,在Windows组件向导对话框中选中“终端服务” , “下一步”,“应用服务器”,“下一步”,然后按照提示即可改变终端服务的模式。  
Windows 2000终端服务有2种运行模式: 远程管理模式和应用程序服务器模式。远程管理模式允许系统管理员远程管理服务器,而且只允许2个终端会话同时登录终端服务器。应用程序服务器模式允许用户运行一个以上应用程序,允许多个用户从终端登录访问服务器。但是,应用终端服务的用户必须有终端服务授权,即必须在90天之内在这个域或工作组中设置终端服务授权服务器,否则用户需删除应用程序,然后再重新安装。
五、修改本地安全策略
控制面板>>管理工具>>本地安全策略>>本地策略>>安全选项>>
1、先找到>>Microsoft网络服务器:在挂起会话之前所需的空闲时间
默认为:15分钟,改为自己所需要的时间(就是登陆后无动作空闲超过多少时间后自动断开)
2、然后找到>>网络安全:在超过登录时间后强制注销。默认为:已禁用,一定要改为:已启用
如果已经发生解决办法:
1、首先你可以telnet到此主机上(不管你用哪种方法),当然如果能直接操作机器更好,不过直接操作就不必用命令行了,那当然是知道机器超级管理员的密码的情况下,可以使用OpenTelnet来打开远程服务器的Telnet端口。
2、Telnet上去后,先看登陆的用户:
输入命令:query user
系统返回:
C:>query user
USERNAME        SESSIONNAME     ID    STATE     IDLE TIME    LOGON TIME
k12update       console         1     运行中         2007-3-14 14:57
此时可以看出的可能都不一样,根据具体情况而定。
ID 0 的用户是本地登陆的,ID 1 和 ID 12是3389登陆的用户,前者在运行中,后者已经断开了,但是断开了仍然占用系统资源和通道,我们要把它踢掉。如下进行操作即可。
输入命令:logoff 1
3、如果服务器关闭了telnet功能(这是默认的),还可以通过SqlServer的xp_cmdshell扩展存储过程,使用格式:master.dbo.xp_cmdshell '命令内容',其余可参考第二步。此方式要求有访问xp_cmdshell的权限
上面的办法基本没有用

[原创经典]“终端服务器超出了最大允许连接数”的解决办法

2007-04-25 17:13

现象及原因:用远程桌面连接登录到终端服务器时经常会遇到“终端服务器超出最大允许连接数”诸如此类错误导致无法正常登录终端服务器,引起该问题的原因在于Windows Server 2003中设置终端服务的缺省连接数为2个链接,并且当登录远程桌面后如果不是采用注销方式退出,而是直接关闭远程桌面窗口,那么实际上会话并没有释放掉,而是继续保留在服务器端,这样就会占用总的链接数,当这个数量达到最大允许值时就会出现上面的提示。
解决方案:
法一:用“注销”方式退出远程桌面而不是直接关闭窗口
法二:踢出已经断开连接的用户
1、首先telnet到此主机上(不管你用什么方法),当然如果能直接操作机器更好,不过直接操作就不必用命令行了,用控制台更直观(略过)。
2、Telnet上去后,先看登陆的用户:
输入命令:query user 系统返回:
用户名Username      会话名Session Name      ID   状态State    空闲时间Idle Time     登录时间Logon Time
administrator            console                               0   运行中               .                           2007-1-12 10:24
lucy                                                                           1   唱片            无                            2007-1-12 10:35
>administrator         rdp-tcp#35                      2   已断开               .                          2007-1-25 18:09
此时可以看出的可能跟我的不一样,根据你的具体情况而定。
ID 0 的用户是本地登陆的
ID 1 和 ID 2是3389登陆的用户,前者在运行中, 后者已经断开了,但是断开了仍然占用系统资源和通道,我们要把它踢掉,如下进行操作即可。
输入命令:logoff 1
再看看
C:\Documents and Settings\Administrator.AD>query user
用户名Username      会话名Session Name      ID   状态State    空闲时间Idle Time     登录时间Logon Time
administrator          console                                0   运行中               .                          2007-1-12 10:24
>administrator       rdp-tcp#35                       2   已断开               .                          2007-1-25 18:09
3、如果服务器关闭了telnet功能(这是默认的),还可以通过SqlServer的xp_cmdshell扩展存储过程,使用格式:master.dbo.xp_cmdshell ''''命令内容'''',其余可参考第二步。此方式要求有访问xp_cmdshell的权限。
法三(最佳方法-推荐):限制已断开链接的会话存在时间
一般情况下,我们在维护远程服务器时,不可能长时间在线,但是系统默认的却是只要登录就不再断开。因此,我们可以修改这一默认设置,给它指定一个自动断开的时间即可。
可以在Windows 2003 服务器上通过组策略中设置一下来解决问题:单击"开始→运行",输入"gpedit.msc",回车后打开组策略窗口,然后依次定位到"计算机配置→管理模板→Windows 组件→终端服务→会话",然后在右侧窗口中双击"为断开的会话设置时间限制",在打开的窗口中将"结束断开连接的会话"时间设置为5分钟,或者设置为空闲就断开。

在远程服务器上打开“运行”窗口,输入“tscc.msc”连接设置窗口。然后双击“连接”项右侧的“RDP-Tcp”,切换到“会话”标签,选中“替代用户设置”选项,再给“结束已断开的会话”设置一个合适的时间即可。
法四:增加连接数量,即设置可连接的数量多些
默认情况下允许远程终端连接的数量是2个用户,我们可以根据需要适当增加远程连接同时在线的用户数。
单击“开始→运行”,输入“gpedit.msc”打开组策略编辑器窗口,依次定位到“计算机配置→管理模板→Windows 组件→终端服务”,再双击右侧的“限制连接数量”,将其TS允许的最大连接数设置大一些即可。
经过上面两个配置(法三&法四),基本上就可以保证远程终端连接时不再受限。但仍有人反映,当前同时只有一个用户进行连接,却提示超出最大允许链接数,这又是什么原因呢?出现这种情况是因为操作不当所造成的。在上一个帐户登录远程桌面后退出时,没有采用注销的方式,而是直接关闭远程桌面窗口,那么导致该会话并没有被释放,而是继续保留在服务器端,占用了连接数,这样就会影响下一个用户的正常登录了。
法五:限制用户会话数
对Terminal Services进行限制,使得一个用户仅仅能够连接一次
对于Windows Server 2003,请在Terminal Services Configuration(Terminal Services配置)中将“限制每位用户只有拥有一个会话”(Restrict each user to one session)设置为“是”(Yes)。此外,您可以将“限制终端服务用户使用单个远程会话”组策略设置为“启用”。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/62guangye/archive/2010/02/05/5291415.aspx

posted @ 2010-11-01 17:06 junlin 阅读(1382) | 评论 (0)编辑 收藏

介绍:

     getDefinitionByName是flash.utils下面的,属于工具包类。正如函数名称是通过Name来获得该名称所对应的类对象,意思就是说通过一个类的名称能够获取到该类对象,从而通过该类对象声明一个该类的实例对象。注意该函数中的参数name=类路径+类名称。

 

实例:

     var btncls:Class = getDefinitionByName("mx.controls.Button") as Class ;

     var myBtn:Object = new btncls() ;

     myBtn.label = "我是通过名字获得类实例声明出来的BTN" ;

      this.addChild( myBtn as DisplayObject ) ;

 

应用:

     现在在flex里面要用到在flash cs3 设计一批元件,当然可以通过导出元件的swc然后添加到工程下面的libs下,当需要在flex里面把这些若干元件当成库来获取库中的单个元素时,我们就可以通过geDefinitionByName函数来实现,具体实现步骤为下:

     第一:在flash cs3中准备好若干个元件,并为元件添加链接名称(最好链接名称和元件名称一样)。然后在场景的第一帧里面添加代码如下:

      function getClassByName(cname:String):Class  //cname即为元件的链接名称。
      {
         var mc:Class =  getDefinitionByName(cname) as Class;
         return mc;
      }

      然后生成swf。

      第二:将swf文件放入工程中,用loader将swf文件导入到程序中。在loader导入成功(触发Event.Complete事件)后,loader.content即为swf。然后访问对象的getClassByName()来获取swf中的元件。存入库中,以备后用。

      代码如下:

      var nameArr:Array = ["烛光","菊花"] ;

      var mcArr:Array = new Array() ;

      function init():void

      {

            var loader:Loader = new Loader() ;

            loader.contentLoaderInfo.addEventLinstener( Event.COMPLETE , onComplete  ) ;

            loader.load(new URLRequest("assets/firelib.swf")) ;

       }

       function onComplete(evnet:Event):void

       {

          for(var i:uint=0 ; i<nameArr.length ; i++)

          {

             var cls:Class = Object( event.target.content).getClassByName(nameArr[i]) ;//getClassByName()即为swf场景中定义的函数。

             mcArr.push( { name:nameArr[i] , content:new cls() } ) ;

           }

       }

 

延伸:

     getQualifiedClassName(value:*)String

          根据一个对象返回该对象的包含完全限定类名称的字符串。

      getQualifiedSuperClassName(value:*)String

          根据一个对象返回该对象的基类的完全限定类名的字符串。

      在通过上面两个方法得到一个完全限定类名称之后,运用 getDefinitionByName()就可以将类名转换成类应用。

posted @ 2010-09-09 19:16 junlin 阅读(1554) | 评论 (1)编辑 收藏
flexendpoint的作用是什么?

endpoint

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://127.0.0.1/flexweb/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint" />
    
        </channel-definition>

        <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
            <endpoint url="https://127.0.0.1/flexweb/messagebroker/amfsecure " class="flex.messaging.endpoints.SecureAMFEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>

        <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://127.0.0.1/flexweb/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>true</polling-enabled>
                <polling-interval-seconds>4</polling-interval-seconds>
            </properties>
        </channel-definition>
  
  
Flex 调用远程或所在web应用的 BlazeDS服务时,必须建立和远端的通道channel,才能正常通信。
1.  通常的方式是 Flex 在编译时就指定远程的端点 Endpoint,service-config.xml 中的Endpoint 配置是 例如:
Xml代码
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf"  
说明:server.name:如果是本机的话,那就是127.0.0.1了,如果发布在网上的话,那一定是一个域名了知道有多么的重要了吧。
      server.port:服务器的端口号。
      context.root:是你的项目名称。
  
编译时指定的方式是在加编译参数,例如:

引用
  -services "services-config.xml" -context-root "/flexWeb"       

   services-config.xml 需要放在当前目录下,或者指定BlazeDS所在的配置文件路径。
2. 在 <mx:RemoteObject/> 对象中指定Endpoint参数:
     例如: 
    Xml代码
<mx:RemoteObject id="roOrder" destination="Hello" showBusyCursor="true" endpoint="http://server:8080/flexWeb/messagebroker/amf">
<mx:RemoteObject id="roOrder" destination="Hello" showBusyCursor="true" endpoint="http://server:8080/flexWeb/messagebroker/amf">
 说明:1) 全路径:          endpoint="http://server:8080/flexWeb/messagebroker/amf" >
       2) 基于contextRoot: endpoint="/flexWeb/messagebroker/amf" >
       3) 基于当前路径:   endpoint="messagebroker/amf" >

posted @ 2010-09-06 16:07 junlin 阅读(1024) | 评论 (0)编辑 收藏

Flex和Java 整合有几种方法,最常见的是:

一,Flex,java在一个项目中。

二,Flex,java分别在两个项目中。

第一种,直接在新建Flex项目中选择应用服务器,选择blazeDS即可。

注意要写上输出文件夹url.endpoint="messagebroker/amf" 写上相对路径即可。

第二种,分别新建Flex ,java 项目,blazeds.war项目中的WebConten/Web-Inf替代java项目下的web-inf。在remoting-config.xml下写上:

<destination id="hxh">  
       <properties>  
           <source>com.demo.hxh</source>  
       </properties>  
    </destination>  
并布署为tomcat.

Flex项目中修改endpoint="/hxh/messagebroker/amf",并设置输出文件夹为java ,WebContent下的,输出文件夹url为java项目,如为http://localhost:8400/hxh

或者新建项目如一,在新建项目java把编译目录设为Flex-webcontent-classes下。

一般问题都错在设置上,endpoint是一个注意点。

关于endpoint:

public interface Endpointextends ManageableAn endpoint receives messages from clients and decodes them, then sends them on to a MessageBroker for routing to a service. The endpoint also encodes messages and delivers them to clients. Endpoints are specific to a message format and network transport, and are defined by the named URI path on which they are located.


在 <mx:RemoteObject/> 对象中指定Endpoint参数:

     1) 全路径:          endpoint="http://server:8080/HelloBlazeDS/messagebroker/amf" >
     2) 基于contextRoot: endpoint="/HelloBlazeDS/messagebroker/amf" >
     3) 基于当前路径:   endpoint="messagebroker/amf" >


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bill1315/archive/2010/07/21/5751496.aspx

posted @ 2010-09-06 16:06 junlin 阅读(913) | 评论 (0)编辑 收藏
一、国外站点
1.资源类

Adobe Flex 2 Component Explorer: 官方的,展示了各种组件的用法,入门必看。

CFlex:很好的一个Flex资源站点,包括教程,新闻,资源站点&hellip;&hellip; 只是页面有点杂乱,大家一般看右边那一栏就行了。

FlexBox:一个收集了网上很多开源组件的站点,是进阶学习的好帮手。

FlexLib:也是一个开源Flex组件站点,不过与FlexBox不同的是,这个是原创,而FlexBox只是收集。

Flex Developer Center:Adobe Flex开发者中心,经常会有一些好的教程出现。

Adobe Labs:这个不用我说了吧。

Flex.org:http://www.flex.org/  官方的,基本上应有尽有。

2. Explorers

Flex 2 Style Explorer:用来设计程序样式风格的工具,很好用,现在源代码已经可以下载。

Flex 2 Primitive Explorer:用来调节各种Primitive图形的组件,非官方的,源代码提供下载。

Flex 2 Filter Explorer:用来调节各种滤镜(filter),非官方的,源代码提供下载。

3. Blogs

MXNA:这个不用我说了吧,虽说这不是一个Blog,但是它聚合了所有优秀的Blog,所以把它放在Blog一栏,下面所有的Blog都在这个聚合中。

Alex Uhlmann:http://weblogs.macromedia.com/auhlmann/

Christophe Coenraets:http://coenraets.org/ 特别推荐

Code Slinger:http://blogs.digitalprimates.net/codeSlinger/

Deitte:http://www.deitte.com/

Doug mccune:http://dougmccune.com/blog/ 特别推荐

Flex Doc Team:http://blogs.adobe.com/flexdoc/

Kuwamoto:http://kuwamoto.org/ 特别推荐

Macromedia Consulting:http://weblogs.macromedia.com/mc/

Matt Chotin:http://weblogs.macromedia.com/mchotin/ 特别推荐

Peter Ent:http://weblogs.macromedia.com/pent/ 特别推荐

Quietly Scheming:http://www.quietlyscheming.com/blog/ 特别推荐

ScaleNine Blog:http://www.scalenine.com/blog/index.php 特别推荐

Steven Webster:http://weblogs.macromedia.com/swebster/

EverythingFlex:http://blog.everythingflex.com/ 特别推荐

Alex&rsquo;s Flex Closet:http://blogs.adobe.com/aharui/ 特别推荐

4. 邮件列表

FlexCoders:http://tech.groups.yahoo.com/group/flexcoders/

Flex Components:http://www.adobe.com/go/flexcomponents 非高级开发者最好别加入

上面是两个比较有名的邮件列表,建议大家提问之前先搜索一下邮件存档,一般都能找到答案,找不到再提问。更多邮件列表请看这里:http://flex.org/community/

5.Cairngorm 相关
Cairngorm Documentation Group 这个里面收集了基本上所有关于Cairngorm的资料

二、国内站点
1.论坛

RIACHINA:前身是RIACN,国内最好的Flex论坛之一。我最初知道Flex从这里开始,对这个站挺有感情,饮水思源,把它排第一。

AnyFlex:国内最好的Flex论坛之一,成立的时间比较早,而且论坛FTP中有很多好的资料。

RIADev:Google网上论坛,d.CAT前辈主持的,一般小问题都能解决。

FlexCoders.cn:刚起步的论坛,不过看域名觉得挺有前途,呵呵。

2.Blogs
Dreamer&rsquo;s Blog:翻译了国外Flex Blog上的大量优秀文章,博主自认为是国内中文资料最多的站点之一。

Y.X.Shawn:对Flex研究很深入,自己写一些开源的组件。

d.CAT:高级开发者,台湾的,为数不多的华语高级开发者,他还做过一个类似Caringorm的架构。

Kenshin:很早就开始研究Flex了,自己开发过很多东西。

3.Cairngorm
  没有。不过我翻译过一个关于Cairngorm 小文档,大概30页左右,或许对你有帮助。

友情提示:上面这些站点中,资源类的更新不快,不用天天看;Blog和MXNA值得天天看,当然您也可以关注本站,因为我会把MXNA上的关于Flex的内容整理过来;有问题请先去邮件列表或者论坛中搜索,基本上都能搜索到。

补充:http://bbs.actionscript3.cn/一个国内的专注于Flex与ActionScript3的论坛.

http://blog.chinaunix.net/u/21684/article_67906.html 博客,里面有有很多Flex的教程和实例.

http://www.flexcoders.cn/又是一个专业的Flex中文论坛
posted @ 2010-09-06 13:52 junlin 阅读(518) | 评论 (0)编辑 收藏

//获得屏幕的分辨率

var x:Number=Capabilities.screenResolutionX;

var y:Number=Capabilities.screenResolutionY;

Alert.show("x="+x+"y="+y);

第二种方法

Alert.show(stage.fullScreenWidth+"=="+stage.fullScreenHeight);

 

//获得stage(工作区)的宽、高

Alert.show(stage.stageWidth+"=="+stage.stageHeight);

 

//读取xml文件
private function readxml2():void

{

var urlrequest:URLRequest=new URLRequest("file/stu.xml");

var urlloader:URLLoader=new URLLoader(urlrequest);

urlloader.addEventListener(Event.COMPLETE, completehandler);

}

 

private function completehandler(event:Event):void

{

var xml:XML=new XML(event.target.data);

// var arr:Array=new Array(xml);

this.dg.dataProvider=xml.children();

this.tree.dataProvider=xml;

this.cb.dataProvider=xml.children();

// this.hlist.dataProvider=xml.children();

}


//flex 获得系统路径

var add:String=ExternalInterface.call("window.location.href.toString",1);

Alert.show(add);

 

//背景颜色不断变化

 private function changeBG():void{

var mytime:Timer=new Timer(2000);

mytime.addEventListener(TimerEvent.TIMER,changHandle);

mytime.start();

 }

 private function changHandle(e:TimerEvent):void{

this.setStyle("backgroundColor",Math.random()* 0xffffff);

 }

 

//获得键盘按下的键的值

public function getCode():void

{

btn.addEventListener(KeyboardEvent.KEY_DOWN, keyHandle);

}

 

function keyHandle(event:KeyboardEvent):void

{

Alert.show("你按下了:" + String.fromCharCode(event.charCode));

}

//动态加载不同界面

import commont.Two;

import commont.One;

var t:Two=new Two();

var o:One=new One();

private function showOne():void{

tw.removeAllChildren();

tw.addChild(o);

}

private function showTwo():void{

tw.removeAllChildren();

tw.addChild(t);

}

//flex 绑定图片

[Bindable]

[Embed(source="img/1.jpg")]

public var phone1:Class;

 

//日期中文标题

<mx:DateChooser id="dtchoose" x="219" y="83" dayNames="[日,一,二,三,四,五,六]" monthNames="[一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月]" change="disDate()" minYear="2007"/>

//选择日期 dateChoose

function disDate():void{

txtDate.text=fm.format(dtchoose.selectedDate.toLocaleDateString());

}

 

//flex 中添加html标记

<mx:TextArea id="text" creationComplete="init()" width="248" height="59">

<mx:htmlText>

<![CDATA[

<input type='file'/>

<a href="http://www.baidu.com">你哈!!!</a>

]]>

</mx:htmlText>

</mx:TextArea>

 

//flex 带下划线的链接

this.lblLink.htmlText="<a href='http://www.google.com' target='_blank'>新 闻</a>";
<mx:Label x="524" y="393" text="Hellollll" id="lblLink" rollOver="focusManager.deactivate()" color="blue" opaqueBackground="#ffffff"

 rollOut="focusManager.activate()" styleName="Label"

 creationComplete="link()"/>
.Label{text-roll-over-color:red; text-decoration:underline; background-color:green; font-size:12px; text-selected-color:red;}

 

//flex 转向 URL

Var url:URLRequest=new URLRequest(“http://www.google.cn”);

navigateToURL(url,”_self”);//在本页打开

navigateToURL(url,”_blank”);//在新的一页打开

 

//弹出对话框
---------非模式打开---------

PopUpManager.createPopUp(this,类(界面)的名称);

---------模式打开---------

var ep:Main=new Main ();

PopUpManager.addPopUp(ep,this,true);//界面,打开窗口父类,是否模式

PopUpManager.centerPopUp(ep);//在父类窗口居中

 

//-----Alert的用法

public function test():void

{

var glow:GlowFilter=new GlowFilter();

glow.color=StyleManager.getColorName("blue");//边框颜色

glow.strength=5;

glow.alpha=0.8;

var alert:Alert=Alert.show("是否选择","提示",Alert.YES|Alert.NO,this,alertHandle);

alert.filters=[glow];

}

private function alertHandle(event:CloseEvent):void{

if(event.detail==Alert.YES){

lbl.text="是";

}else{

lbl.text="否";

}

}

 

<mx:Button x="62" y="80" label="Button" click="test()"/>

<mx:Label x="62" y="37" text="Label" width="65" id="lbl"/>

 

//flex Combobox添加 –请选择-

private function loadCB(){

var arr:Array=new Array("-请选择-");

for(var i:int=1;i<10;i++){

arr[i]=i;

}

this.cb.dataProvider=arr;

}

 

 

//combobox 选择的值和下标

private function selected():void{

Alert.show(cb.selectedItem.toString()+"下标:"+cb.selectedIndex);

}

<mx:ComboBox x="194" y="80" id="cb" creationComplete="loadCB()" change="selected()">

 

//鼠标移动变大,Button加图片,变手型

<mx:Button x="72" y="80" label="Button" click="test()" mouseMove="changBig()" mouseOut="changSmall()" id="btn" height="52" icon="@Embed(source='img/3.jpg')"

 labelPlacement="bottom" width="67" useHandCursor="true" buttonMode="true"/>

 

private function changBig():void{

this.btn.scaleX=1.5;

this.btn.scaleY=1.5

}

private function changSmall():void{

this.btn.scaleX=1;

this.btn.scaleY=1;

}

 

//flex panel 拖动效果

<mx:Panel x="194" y="125" width="192" height="121" layout="absolute" id="panel" mouseDown="ondragStart(event)" mouseUp="ondragStop(event)">

</mx:Panel>

private function ondragStart(event:MouseEvent):void{

Panel(event.target).startDrag();

}

private function ondragStop(event:MouseEvent):void{

Panel(event.target).stopDrag();

}

 

//写入共享数据

share=SharedObject.getLocal("username");

share.data.userName=txtUser.text;

share.flush();

 

//读取共享数据

var share:SharedObject=SharedObject.getLocal("username");

Alert.show(share.data.userName);

 

 

 

 

 

 

 

//jsp/html文件嵌入到flex中(需要把flexiframe.swc放在项目的flex_libs下)

 

Application标签内xmlns:code=http://code.google.com/p/flex-iframe/

 

<mx:HDividedBox x="0" y="10" width="100%" height="500">

<mx:Panel width="30%" height="500" layout="absolute">

 

</mx:Panel>

<mx:Panel width="70%" height="500" layout="absolute">

<code:IFrame id="frm" source="file/万年历.html" height="100%" width="100%"/><!-这是最重要的-à

</mx:Panel>

</mx:HDividedBox>

 

//检查使用的操作系统

private function checkOS():void{

var os:String=Capabilities.os;

tt.text="你的操作系统是:--"+os;

}

 

//检查所使用的浏览器

private function checkPlay():void{

var play:String=Capabilities.playerType;

Alert.show(play);

if(play=="ActiveX"){

tt.text="你的浏览器是--IE";

}else if(play=="PlugIn"){

tt.text="你的浏览器是--Mozilla-Firefox";

}else{

tt.text="你的浏览器是--其他";

}

}

 

//检查player的版本和使用的语言

private function other():void{

var v:String=Capabilities.version;

var l:String=Capabilities.language;

tt.text="你的flayer版本号:--"+v+

"\r\n你的语言是:--"+l;

}

 

//改变鼠标样式

[Bindable]

[Embed(source="img/157.jpg")]

public var cur:Class;

private function initCursor(event:Event){

CursorManager.setCursor(cur);

}


//设置AdvancedDataGrid的表头竖线为空

headerSortSeparatorSkin="mx.skins.ProgrammaticSkin"

 

 


//获得鼠标坐标

var cx:Number=CursorManager.currentCursorXOffset;

var cy:Number=CursorManager.currentCursorYOffset;

var id:int=CursorManager.currentCursorID;

Alert.show("x:="+cx+"y:="+y+"id="+id);


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xuhuanchao/archive/2009/10/31/4749241.aspx

posted @ 2010-08-27 09:04 junlin 阅读(584) | 评论 (0)编辑 收藏

导航

<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜