使用Flash MX和Java classes作实时的动态图表(台湾 陈建文)
说明:本文是来自台湾的陈建文朋友([email protected])投寄给JR的一篇文章,他希望能够把自己的一些平时研究的心得和大家分享。为了方便大家阅读,也应作者之约,本人将这篇文章转换为简体中文版,转换不当的地方还希望大家多多指教。在这儿,我也代表JR的所有朋友感谢建文朋友的热心奉献,希望能够读到建文更多的好文章!
(注意在浏览器中设定为Big5码以正常浏览)
AP Server(笔者使用BEA的Weblogic 7) + Flash Remoting
将Flash Charting Compontnts中的BarChart组件拖放到场景中,并将其实体名称命名为chart, 在该影格中加入 Action Script内容如下:
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])投寄给JR的一篇文章,他希望能够把自己的一些平时研究的心得和大家分享。为了方便大家阅读,也应作者之约,本人将这篇文章转换为简体中文版,转换不当的地方还希望大家多多指教。在这儿,我也代表JR的所有朋友感谢建文朋友的热心奉献,希望能够读到建文更多的好文章!
(注意在浏览器中设定为Big5码以正常浏览)
环境设定:
Flash MX + Flash Remoting Components + Flash Charting CompontntsAP 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 getInformation(){
- resources = new ();
- //以随机数取得要等待的时间(0ms~4000ms)
- int delay = (new ( .random()*5).intValue())*1000;
- //以随机数取得要更新的数据(0~9)
- no = new ((new ( .random()*10).intValue()) );
- //以随机数取得要更新的值 (0~99)
- value = new ((new ( .random()*100).intValue()));
- //将no,label,value置入类型为HashMap的resource中
- resources.put("no",no);
- resources.put("label",no+"#");
- resources.put("value",value);
- //将相关信息输出到console中,以方便观察
- .out.println("Delay Time="+delay+" no="+no+" value="+value);
- //开始依delay的值等待
- try {
- .sleep(delay);
- }
- catch ( ex) {}
- //将 resource 传回
- return resources;
- }
- }
执行结果
执行后你可以看见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来给前台调用而已。