爱心技术专栏专题

使用FlashMX和Javaclasses作实时的动态图

摘录:java 来源:java 加入时间:2006年08月11日
摘要:
使用FlashMX和Javaclasses作实时的动态图
使用Flash MX和Java classes作实时的动态图表(台湾 陈建文)
说明:本文是来自台湾的陈建文朋友([email protected])投寄给JR的一篇文章,他希望能够把自己的一些平时研究的心得和大家分享。为了方便大家阅读,也应作者之约,本人将这篇文章转换为简体中文版,转换不当的地方还希望大家多多指教。在这儿,我也代表JR的所有朋友感谢建文朋友的热心奉献,希望能够读到建文更多的好文章!


转载:转载请保留本信息,本文来自
http://www.51dibs.com
/html/2006/article/info10/a_d674c11a31c11f8e.htm

使用FlashMX和Javaclasses作实时的动态图

站点:爱心种子小博士 关键字:使用FlashMX和Java

   
使用Flash MX和Java classes作实时的动态图表(台湾 陈建文)
说明:本文是来自台湾的陈建文朋友([email protected])投寄给JR的一篇文章,他希望能够把自己的一些平时研究的心得和大家分享。为了方便大家阅读,也应作者之约,本人将这篇文章转换为简体中文版,转换不当的地方还希望大家多多指教。在这儿,我也代表JR的所有朋友感谢建文朋友的热心奉献,希望能够读到建文更多的好文章!


(注意在浏览器中设定为Big5码以正常浏览)

环境设定:

Flash MX + Flash Remoting Components + Flash Charting Compontnts
AP Server(笔者使用BEA的Weblogic 7) + Flash Remoting

前端部分:



将Flash Charting Compontnts中的BarChart组件拖放到场景中,并将其实体名称命名为chart, 在该影格中加入 Action Script内容如下:
  1.    #include "NetDebug.as"
  2.    #include "NetServices.as"
  3.    //设定Flash Remoting Gateway 所在的URL路径
  4.    NetServices.setDefaultGatewayURL("http://localhost:7001/flashservices/gateway");
  5.    gatewayConnnection = NetServices.createGatewayConnection();
  6.    //设定要调用的Java Class
  7.    flashtestService = gatewayConnnection.getService("my_flash_remoting.myServer",    this);
  8.    //开始调用 getInformation 这个java method
  9.    flashtestService.getInformation();
  10.    var theData = new DataProviderClass();
  11.    initChartData();
  12.    //初始化chart中的数据
  13.    function initChartData() {
  14.      var items = new Array({label:"0#", value:0},{label:"1#",value:0},
  15.          {label:"2#", value:0},{label:"3#", value:0},{label:"4#", value:0},
  16.          {label:"5#", value:0},{label:"6#", value:0},{label:"7#", value:0},
  17.          {label:"8#", value:0},{label:"9#", value:0});
  18.      for (var i = 0; i<items.length; i++) {
  19.        theData.addItem(items[i]);
  20.      }
  21.      chart.setDataProvider(theData);
  22.    }
  23.    //这是 getInformation 这个java method 完成后会触发的 funtion
  24.    function getInformation_Result(result) {
  25.      theData.replaceItemAt(result["no"], result);
  26.      //数据更新后,再次调用 getInformation 这个java method,这样才会持续更新数据
  27.      flashtestService.getInformation();
  28.    }

后端部分:

将以下的代码存成 myServer.java,编译后保存在my_flash_remoting的目录下,然后将my_flash_remoting的上一层目录设到Ap Server 的 classes path中使Ap Server 能存取到我们写的class。(当然也可以打包成jar档案文件,加到classes path中)
  1. package my_flash_remoting;
  2. import java.util.*;
  3. public class myServer {
  4.  public myServer() {}
  5.  public  getInformation(){
  6.     resources = new ();
  7.    //以随机数取得要等待的时间(0ms~4000ms)
  8.    int delay = (new .random()*5).intValue())*1000;
  9.    //以随机数取得要更新的数据(0~9)
  10.     no = new ((new .random()*10).intValue()) );
  11.    //以随机数取得要更新的值 (0~99)
  12.     value = new ((new .random()*100).intValue()));
  13.    //将no,label,value置入类型为HashMap的resource中 
  14.    resources.put("no",no);
  15.    resources.put("label",no+"#");
  16.    resources.put("value",value);
  17.    //将相关信息输出到console中,以方便观察
  18.    .out.println("Delay Time="+delay+" no="+no+"    value="+value);
  19.    //开始依delay的值等待
  20.    try {
  21.      .sleep(delay);
  22.    }
  23.    catch ( ex) {}
  24.    //将 resource 传回
  25.    return resources;
  26.    }
  27.  }

执行结果

执行后你可以看见BarChart依后端JAVA程序随机产生的数值不定时变化。

结论

如果要从网页上显示出实时动态的图表,较常见的作法是使用 Java Applet(如股市走势图),现在由于Flash提供了前端端良好动态的机制,也给了Web程序开发者一个新的选择。另外使用Flash Remoting调用Java class 只需短短的几行 Action Script,加上所提供的NetConnection Debuger这个排错工具,使得开发者的效率提高不少。

心得

要调用的Java class必须声明为 Public。 
Flash Remoting 的Service 是多线程的,调用 Java method 后,原程序会自动继续执行。 
调用 Java method 后的返回值会自动触发 "method Name"+_Result 这个 function,像本例中调用 getInformation() 这个 Java method,返回值就会触发 getInformation_Result(result),并将返回值以参数result带回。 
中文数据的传送是没有问题的,但是要将中文显示在Chart Components 中可就不行了,我猜想是component中的字型或处理方式的问题,若要在chart 中显示中文,必须要动手改 Component了。 
其Flash Remoteing 是100% pure Java的程序,所以可以用在各种标准的AP Server上,但是其中有些特殊功能(如直接用Action Script 执行SQL等),必须配合MacroMedia 的自家?品JRun or ColdFution来实现。但是笔者的看法是,既然能够调用后端的Java Classes了,还有其他的事作不到吗?只是要依需求开发相关的Java Classes来给前台调用而已。




客户服务中心信箱:[email protected] [email protected] 网站地图

声明

合作伙伴: