最近在项目中遇到一个问题,在Flex中使用Alert.show("this is content!", "title");发现对话框可以弹出来,但是文本始终不显示。why? 由此开始了我苦逼的排查之路。

 
首先,可以排除没有引入包 import mx.controls.Alert;的问题。如果没有引入包的话,编译会出现错误。所以这一点可以排除掉。
但是这个工程之前就可以弹出对话框啊,为什么现在不能正常弹出呢?系统原生的对话框竟然不起作用!是不是因为文本的css设置有问题呢?比如字体或者颜色的设置造成了文本的不可见?有可能啊。然后自己设置了下css,背景设置为白色,字体设置为红色。重新编译,坐等奇迹的发生。但是对话框除了个框框还是什么都没有!看来css的设置没有起作用。
 
那会不会被别的css给覆盖了呢?本着这个想法,去工程里面去找,果然,不出我所料,一个css的页面自定义了Alert的样式,然后果断注释了这段代码,重新编译,等待惊喜,失望了,惊喜没有发生。还是以前那个样子。
 
虽然到目前为止,对话框还是不能正常使用,但是可以肯定一点的是,跟css没有关系。那就只剩下两种可能了:
(1)对话框本身有问题;(2)对话框没有问题,但是系统可能不支持。
 
对话框本身会有问题么?想到这里,突然想起系统本身其他地方也有使用对话框的啊。
然后仔细看了下以前弹出对话框的代码。有收获,发现之前对话框不是原生的Alert,而是一个被封装的AlertInfo,该AlertInfo继承 了Panel,完成了对对话框的模拟!ok,看到这里,应该比较清楚了,怎么去做一个对话框。用自定义的AlertInfo,去模拟一个对话框。果断
new AlertInfo;重新编译,这回应该是问题不大了。可是没有我想象的那么简单,依然有问题。而且,该系统不仅使用了自定义的AlertInfo,而且使用了原生的Alert。
 
这下该令人头疼了。原生对话框不能使用,自定义对话框不能使用,就连以前正常可以运行的对话框也无法正常使用了!
 
有点烦躁。冷静了一下后,开始重新思考面前的问题。目前我正在使用的升级工程,那么我重新建立一个新的文件test.mxml文件,里面只写了一句话:Alert.show("content","title");震精了,竟然也不正常!好吧!使用Flex Builder 重新建立一个Flex项目,新建一个test.mxml文件,发现新项目的可以正常弹出对话框。为何?我仔细比对了两个文件。发现两个mxml的根标签Application就不一样。
升级工程中test.mxml的代码:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml "
                layout=" absolute" minWidth=" 955" minHeight="600"
                creationComplete="init()">
</mx:Application>
新工程中的test.mxml代码:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009 "
               xmlns:s="library://ns.adobe.com/flex/spark "
               xmlns:mx="library://ns.adobe.com/flex/mx "
               minWidth="955" minHeight="600">
</s:Application>
 很显然,两者所引用的库是不一样的。升级工程中是flex3引用的库,而新工程中则是flex4引用的工程,而且两者的标签是不同的,flex3是以<mx:Application></mx:Application>开始,而flex4是以<s:Application></s:Application>开始。为什么会出现这种情况呢?即使是出现这种情况,flex3应该也支持Alert的,那在升级工程中的Alert为啥不正常呢?而且关键是两者使用的都是flex4.1 的sdk。可能跟编译环境有关。看了下两者的编译选项,果然就发现问题了。原来升级工程中使用的兼容flex3的模式。而新项目则没有使用。那在兼容模式下就不能正常使用Alert了?上网谷歌了一下,发现有很多网友也有的问题。原来Flex4和Flex3 的差别还是蛮大的。包括Alert在内的很多控件在兼容模式下都无法正常使用。好吧,既然是兼容因起来的问题,那果断去掉兼容。重新编译,对话框出来了,文本也出来了。所以问题的最终原因不是对话框的问题,是系统环境的原因。可是主工程使用的明明是Flex4,升级工程凭什么搞一个Flex3出来?看了下升级工程的日期,创建日期是2013年7月。为何不和主工程(升级工程算是主工程的一个插件)使用同样的环境?可能前同事出于其他原因的考虑吧,或者说就是无意埋下的坑。好吧,为了为了和主工程保持一致,我将Flex3升级为Flex4,样式由默认的helo该为spark,重新跑一遍程序。看起来是无大碍了。
 
到此为止,花了整整一天时间,一个Alert只弹框,不显示文本的问题就全部结束了。纵观整个过程,发现问题,分析问题,假设,求证,发现问题的症结,解决问题,最后升级系统。
 
 如果发现问题后,一开始就使用谷歌,可能会减少很多时间去解决这个问题。谷歌虽然强大,但我还是愿意先去自己做一些摸索,做一些分析,万不得以,再去考虑搜索引擎。谁说假设求证不也是一件很愉快的事情呢?虽然这个过程耗费时间会比较长。
 

一个Flex 对话框的坑的更多相关文章

  1. Android 如何监听返回键,弹出一个退出对话框

    android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. public class BackKeyTest ...

  2. [转]Android 如何监听返回键,弹出一个退出对话框

    本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...

  3. 转 如何在调用WCF服务之前弹出一个确认对话框

    自定义InteractiveChannelInitializer(InvocationConfirmationInteractiveChannelInitializer)定义如下.我们在BeginDi ...

  4. 一个flex buider 3 在eclipse下不能编译的问题解决

    今天处理一个遗留的项目:项目使用了flex作为界面,装好flex Builder 3 并添加插件到eclipse,eclipse使用3.7版本. 导入项目,编译,发现编译时候出现 Errors run ...

  5. 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)

    Enum的简介 枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型. 在java语言中,枚举类型是一个完整功能的类 ...

  6. 【Java】Android EditText开发的一个容易忽略的坑

    这几天接手做一个远程控制Android application,安卓前台的EditText用来输入ip地址.端口等信息,发现EditText的使用存在着巨坑一个! 我在网上找了半天,发现仅仅有人提出这 ...

  7. 一个关于cookie的坑

    #问题:今天上午踩了一个坑,首先,这个小案例的运行结果是应该是在前端页面出现一个当前时间的,当然如果是首次登陆的话应该是显示"第一次登陆",第二次则会显示上次的登录时间,但是却没有 ...

  8. Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭

    AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个 ...

  9. MFC 关于new出一个新对话框时,退出对话框内存泄漏的问题解决

    问题: 在进行点击按钮弹出对话框时,我是用了new来生成一个新的对话框,但是在新对话框关闭的时候,经过检查发现,新对话框存在内存泄漏问题. 原因: 因为使用了new,但是当时没有找到地方进行delet ...

随机推荐

  1. C#对象的new和不new的区别

    new:为对象分配空间. 首先,直接声明一个变量:byte[] test;只是有了一个变量名字,而它是没有实际空间的,需要分配空间: 分配空间的方法: 1.使用new,byte[] test = ne ...

  2. ubuntu下交叉编译ffmpeg

    环境:ubuntu16.04 交叉编译器版本:4.8.3 依赖x264,lame x264: 1.wget ftp://ftp.videolan.org/pub/x264/snapshots/last ...

  3. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  4. [不屈的复习] - 编辑工具IDE选取与Hello World

    大家真正在工作中开发 java 应用都会使用eclipse,myeclipse, IntelliJ IDEA等等 现在还有vscode也支持了java扩展 在控制台下运行第一个Java程序,可以看到输 ...

  5. 如何解决Visual Studio2010 编译时提示系统找不到指定文件问题

    前一段时间,开始使用vs2010编写程序,可是在编译的时候总是报错,提示系统找不到指定文件,导致无法正常运行程序,花了好久时间终于找到原因解决,是因为常规的输出目录 要与链接的常规的输出文件要相对应. ...

  6. OpFlex

    参考: OpFlex Main OpFlex: Building and Running OpFlex Building mkdir -p ~/work pushd work git clone ht ...

  7. UVa 10570 外星人聚会

    https://vjudge.net/problem/UVA-10570 题意:输入1~n的排列,每次可以交换两个整数,求出最少交换次数使之变成有序的环状序列. 思路:主要的解题方法就是寻找置换环,举 ...

  8. 【Python】【 接口自动化测试】【一】环境搭建

    1. 环境配置 我电脑Windows7 64位  +  Python2.7  + Oracle客户端 10.2 + cx_Oracle 10g Oracle客户端下载(为此我还申请个Oracle账号) ...

  9. 【网络知识】【1】http、tcp/udp、soap的区别

    一句话总结: soap信息可以通过http协议包装后通过tcp或udp传输 参考:https://zhidao.baidu.com/question/617706398106243452.html

  10. python 多线程队列

    ##Using Queue with multiprocessing – Chapter : Process Based Parallelism import multiprocessing impo ...