使用Flash MX和Java classes作实时的动态图表(台湾 陈建文)
说明:本文是来自台湾的陈建文朋友(gd8936@seed.net.tw)投寄给JR的一篇文章,他希望能够把自己的一些“平时研究的心得和大家分享”。为了方便大家阅读,也应作者之约,本人将这篇文章转换为简体中文版,转换不当的地方还希望大家多多指教。在这儿,我也代
说明:本文是来自台湾的陈建文朋友(gd8936@seed.net.tw)投寄给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内容如下:
- #include "NetDebug.as"
- #include "NetServices.as"
- //设定Flash Remoting Gateway 所在的URL路径
- NetServices.setDefaultGatewayURL("http://localhost:7001/flashservices/gateway");
- gatewayConnnection = NetServices.createGatewayConnection();
- //设定要调用的Java Class
- flashtestService = gatewayConnnection.getService("my_flash_remoting.myServer", this);
- //开始调用 getInformation 这个java method
- flashtestService.getInformation();
- var theData = new DataProviderClass();
- initChartData();
- //初始化chart中的数据
- function initChartData() {
- var items = new Array({label:"0#", value:0},{label:"1#",value:0},
- {label:"2#", value:0},{label:"3#", value:0},{label:"4#", value:0},
- {label:"5#", value:0},{label:"6#", value:0},{label:"7#", value:0},
- {label:"8#", value:0},{label:"9#", value:0});
- for (var i = 0; i<items.length; i++) {
- theData.addItem(items[i]);
- }
- chart.setDataProvider(theData);
- }
- //这是 getInformation 这个java method 完成后会触发的 funtion
- function getInformation_Result(result) {
- theData.replaceItemAt(result["no"], result);
- //数据更新后,再次调用 getInformation 这个java method,这样才会持续更新数据
- flashtestService.getInformation();
- }
后端部分:
将以下的代码存成 myServer.java,编译后保存在my_flash_remoting的目录下,然后将my_flash_remoting的上一层目录设到Ap Server 的 classes path中使Ap Server 能存取到我们写的class。(当然也可以打包成jar档案文件,加到classes path中)
- package my_flash_remoting;
- import java.util.*;
- public class myServer {
- public myServer() {}
- public Map getInformation(){
- Map resources = new HashMap();
- //以随机数取得要等待的时间(0ms~4000ms)
- int delay = (new Double( Math.random()*5).intValue())*1000;
- //以随机数取得要更新的数据(0~9)
- Integer no = new Integer((new Double( Math.random()*10).intValue()) );
- //以随机数取得要更新的值 (0~99)
- Integer value = new Integer((new Double( Math.random()*100).intValue()));
- //将no,label,value置入类型为HashMap的resource中
- resources.put("no",no);
- resources.put("label",no+"#");
- resources.put("value",value);
- //将相关信息输出到console中,以方便观察
- System.out.println("Delay Time="+delay+" no="+no+" value="+value);
- //开始依delay的值等待
- try {
- Thread.sleep(delay);
- }
- catch (Exception ex) {}
- //将 resource 传回
- return resources;
- }
- }
执行结果
执行后你可以看见BarChart依后端JAVA程序随机产生的数值不定时变化。
结论
如果要从网页上显示出实时动态的图表,较常见的作法是使用
Java Applet(如股市走势图),现在由于Flash提供了前端端良好动态的机制,也给了Web程序
开发者一个新的选择。另外使用Flash Remoting调用Java class 只需短短的几行 Action Script,加上所提供的NetConnection De
buger这个排错工具,使得
开发者的效率提高不少。
心得
要调用的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来给前台调用而已。
原文转自:http://www.ltesting.net
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
|