关于flex与java交互的问题

问题描述

各位前辈好! 本人最近在做一个关于输气管网计算界面的项目,要用到Flex与java通信。我在java里面定义了static变量,然后在flex里面向java传值(传的值有数组类型,也有double类型),然后在java里面实现计算并返回(能不能返回数组?如何做到?在flex里输入到什么组件比较好?)到flex。现在我经过测试发现传值的过程没什么问题,但是返回到flex里老出问题,百思不得其解,请求各位援助。下面是我的调用的java类:(注:程序运行没有什么问题的,只是没法被flex调用返回值,我是想调用Final()或者calculation()来返回getP()等)package danxiang;import java.sql.ResultSet;import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;import domain.Model;import domain.Result;import flex.messaging.io.ArrayList;public class SectionCalculationwj {static double d[];static int start[];public static double deta ;public static double Z;static int end[];static double l[];static double qq[];static double Q0[];static double section[];public static int point;public static int ss;static double P0[] ;static double T0[];public static double Th ;static double K[] ;public static double rog ;public static double cpg ;public static double Di;//下面这一部分是在flex里面调用的,从flex里面往这传值public String initiateqq(double init[]){ qq=init; return "qq"; }public String initiatepoint(int i){point=i;return "point";}public String initiateSection(double init[]){ section=init; return "section";}public String initiateStart(int init[]){ start=init; return "start";}public String initiateEnd(int init[]){ end=init; return "end::"+end[1];}public String initiated(double init[]){ d=init; return "D:::"+d[1]; }public String initiatel(double init[]){ l=init; return "L:::"+l[1];}public String initiateT0(double init[]){ T0=init; return "T0";}public String initiateQ0(double init[]){ Q0=init; return "Q0";}public String initiateP(double init[]){P0=init; return "P0";}public String initiateK(double init[]){ K=init; return "K";}public double initiatedeta(double DETA){ deta=DETA; return deta;}public double initiatess(int S){ ss=S; return ss;}public double initiaterog(double ROG){ rog=ROG; return rog;}public double initiatecpg(double C){ cpg=C; return cpg;}public double initiateDi(double di){ Di=di; return Di;}public double initiateTh(double th){ Th=th; return Th;}public double initiateZ(double zz){ Z=zz; return Z;}//////下面是我希望调用的,并返回到flex里面。。//public String Final() {// SectionCalculationwj aa = new SectionCalculationwj();// aa.calculation();// return "Hello,成功了!";// // } public double[] calculation() { int step = 0; Result result = new Result(); //第一步,取初值 Model model = getInitValue(); //节点数 int n = model.getPoint(); //管道数 int m = model.getSection().length; //计算出A,Azz result.setA(A(model)); result.setAzz(Azz(result.getA())); result.setP(model.getP0()); result.setAverageP(averageP(model, result)); double condition; result.setQx(model.getQ0()); result.setT(model.getT0()); result.setBw(bw(result)); do { result.setSj(Sj(model, result)); double[] tempQ = {}; //算AGA之前先求出G result.setG(G(result.getSj(), result.getQx())); result.setAGA(AGA(result)); fenkuai kf = new fenkuai(); result.setP(kf.fk(result.getAGA(), model.getSs(), result.getP(), model.getQq())); result.setAverageP(averageP(model, result)); result.setDetap(detap(result)); tempQ = Qnew(result); condition = condition(tempQ, result.getQx()); for (int k = 0; k < tempQ.length; k++) { tempQ[k] = (result.getQx()[k] + tempQ[k]) / 2; } result.setQx(tempQ); // 温降 水 result.setAa(aa(model, result)); result.setT(resetT(model, result));// 水的析出 result.setBw(bw(result)); result.setDetabw(detabw(model,result)); step += 1; } while (condition > 0.001); System.out.println(step); for (int i = 0; i < 12; i++) { System.out.println("" + result.getP()[i]); } for (int i = 0; i < 12; i++) { System.out.println("" + result.getT()[i]); } for (int i = 0; i < 11; i++) { System.out.println("" + result.getDetabw()[i]); } return result.getP(); }public double[][] A(Model model) { int[] start = model.getStart(); int[] end = model.getEnd(); double[] section = model.getSection(); int n = model.getPoint(); int m = section.length; double[][] A = new double[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (i + 1 == start[j]) { A[i][j] = -1; } if (i + 1 == end[j]) { A[i][j] = 1; } else if (i + 1 != start[j] && i + 1 != end[j]) { A[i][j] = 0; } } } return A; } //将A矩阵转置 public double[][] Azz(double[][] A) { int n = A.length; int m = A[0].length; double[][] Azz = new double[m][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Azz[j][i] = A[i][j]; } } return Azz; } // 计算Sj public double[] Sj(Model model, Result result) { double[] section = model.getSection(); double[] D = model.getD(); double[] L = model.getL(); double[] T = result.getT(); double deta = model.getDeta(); double Z = model.getZ(); double[] averageP = result.getAverageP(); //第一步,计算lam的值 int m = section.length; double[] lam = new double[m]; double[] Sj = new double[m]; for (int i = 0; i < m; i++) { lam[i] = 0.009407 / Math.pow(D[i], (1.0 / 3)); } //第二步,计算Sj for (int i = 0; i < m; i++) { Sj[i] = -675.3515 * lam[i] * deta * Z * T[i] * L[i] / Math.pow(D[i], 5) / (2 * averageP[i]); } return Sj; } // 计算G public double[][] G(double[] Sj, double[] Q) { int m = Sj.length; double[][] G = new double[m][m]; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if (i == j) { G[i][j] = 1 / Sj[i] / Math.abs(Q[i]); } else { G[i][j] = 0; } } } return G; } //计算AGA public double[][] AGA(Result result) { double[][] G = result.getG(); double[][] A = result.getA(); double[][] Azz = result.getAzz(); int n = A.length; int m = A[0].length; double AG[][] = new double[n][m]; double AGA[][] = new double[n][n]; for (int i = 0; i < A.length; i++) { for (int j = 0; j < G[0].length; j++) { for (int k = 0; k < G.length; k++) { AG[i][j] += A[i][k] * G[k][j]; } } } for (int i = 0; i < AG.length; i++) { for (int j = 0; j < Azz[0].length; j++) { for (int k = 0; k < Azz.length; k++) { AGA[i][j] += AG[i][k] * Azz[k][j]; } } } return AGA; } public double[] detap(Result result) { double[][] Azz = result.getAzz(); double[] p = result.getP(); int m = Azz.length; int n = Azz[0].length; double[] detap = new double[m]; //计算压力降 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { detap[i] += Azz[i][j] * p[j]; } } return detap; } public double[] averageP(Model model, Result result) { double[] P = result.getP(); int[] start = model.getStart(); int[] end = model.getEnd(); int m = start.length; double[] averageP = new double[m]; for (int j = 0; j < m; j++) { averageP[j] = 0.5 * (P[start[j] - 1] + P[end[j] - 1]); } return averageP; } public double[] Qnew(Result result) { //计算新流量 double[][] G = result.getG(); double[] detap = result.getDetap(); int m = G.length; double[] Qnew = new double[m]; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { Qnew[i] += G[i][j] * detap[j]; } } return Qnew; } public double condition(double[] tempQ, double[] Q) { int m = tempQ.length; double condition = 0.0; for (int i = 0; i < m; i++) { condition += Math.pow((tempQ[i] - Q[i]), 2); } condition = Math.pow(condition, 0.5); return condition; } //单相温降计算 public double[] aa(Model model, Result result) { double[] Q = result.getQx(); double[] D = model.getD(); double[] K = model.getK(); double rog = model.getRog(); double cpg = model.getCpg(); double[] bw=result.getBw(); int m = Q.length; double[] aa = new double[m]; for (int i = 0; i < m; i++) { aa[i] = K[i] * Math.PI * D[i] / ((rog+bw[i]) * Q[i] * cpg )/1000000; } return aa; } public double[] resetT(Model model, Result result) { double Th = model.getTh(); int[] start = model.getStart(); int[] end = model.getEnd(); double[] T = result.getT(); double[] aa = result.getAa(); double[] l = model.getL(); double Di = model.getDi(); double[] detap = result.getDetap(); int m = aa.length; for (int i = 0; i < m; i++) { T[end[i] - 1] = Th + ((T[start[i] - 1]) - Th) * Math.exp(-aa[i] * l[i]) + Di * detap[i] / 1000000 * (1 - Math.exp(-aa[i] * l[i])) / aa[i] / l[i]; } return T; } //饱和水的计算kg/m3直接加在气体密度上 public double[] bw(Result result) { double[] T = result.getT(); double[] P=result.getP(); int m = P.length; double[] pb=new double[m];//饱和蒸汽压 double[] bw = new double[m]; // y = 0.06233 x3 + 0.60057 x2 + 46.27664 x + 643.34653 xOC,ypa for (int j = 0; j < m; j++) { pb[j] = 0.06233*Math.pow(T[j]-273.15,3)+0.60057*Math.pow(T[j]-273.15,2)+46.27664*(T[j]-273.15)+643.34653; bw[j]=803*pb[j]/(P[j]-pb[j])*0.001; } return bw; } //起终点水量变化计算 >0进水,<0析出水 单位kg public double[] detabw(Model model,Result result) { double[] bw = result.getBw(); int[] start=model.getStart(); int[] end=model.getEnd(); double[]d=model.getD(); double[]L=model.getL(); int m = start.length; double[] detabw = new double[m]; for (int j = 0; j < m; j++) { detabw[j] = (bw[end[j]-1] - bw[start[j]-1])*(Math.PI*Math.pow(d[j], 2)/4)*L[j]; } return detabw; } } 问题补充:FLEX里面的array可以直接传给java的数组,我测试过了;问题是我现在即使把public double[] calculation() 改成public String calculation()返回单个字符getP()[1]也是不成功zyn010101 写道

解决方案

把calculation方法中的代码全放到下面的代码处,try{代码 } catch(Exception e){e.printStackTrace();}
解决方案二:
我们Flex访问后台用的<mx:HTTPService标签可以定位到后台要访问的Action,在请求的时可以用var params:URLVariables = new URLVariables();params.objec = Object可以携带任何类型的参数,params.oper="adminLogin";,具体那个方法, 在后台Java中直接可以request.getParameter("object")获得传过来的参数,在后台做一系列的操作计算以后,用writeResponse(rusponse,object.toString());写回到前台的成功方法(注意,writeResponse为自定义方法), 写回的object为String类型,你可以使用JSON包的JSON对象开封装数组,集合等, 现在就可以在前台Flex的protected function logOutSuccess(event:ResultEvent):void{var returnInfo : String = event.result.toString();}里面得到这个对象了,然后你传过来的是什么类型你就转换成什么类型,就可以了
解决方案三:
直接string交互 , 传过去了再自己折腾呗 。
解决方案四:
我qq381547903,你加我吧
解决方案五:
在后台java代码加catch Exception块,否则控制台不报错
解决方案六:
flex获取的数据alert出来和java端获取的一样不?前端报什么错?监控RemoteObject的fault事件,把错误信息alert出来看看。
解决方案七:
你查下as和java的数据类型对应表,你把数组转成字符串到flex端再切割字符串吧。

时间: 2024-07-30 16:39:21

关于flex与java交互的问题的相关文章

FLEX与JAVA交互实例代码与详细说明(1/3)

FLEX与JAVA交互实例代码与详细说明 下载FLEX的插件 step 1.下载 flex 3.0 plugin 插件 装在 我的myeclips教程e 6.0 上    1) 下载地址:http://trials.adobe.com/Applications/Flex/FlexBuilder/3/FB3_WWEJ_Plugin.exe    2)安装插件  将flex plugin 安装目录里面的com.adobe.flexbuilder.update.site 文件夹下面的features

Flex与java交互之数据库数据读取

前几天有网友要我写一篇关于flex与数据库交互的例子,一直由于时间紧没能写,今天晚上特地花点时间写了个例子,希望能给大家一点帮助,其实flex与数据库交互很简单的,我主要是通过java与数据库交互读取数据,然后flex和java进行交互,把java读取的数据在flex前端显示出来,好了,说了一堆废话,下面代码说明问题. 对于建立一个flex web应用的步骤我就不多说了哈. 首先要求大家到数据库建立一个数据库,在我这例子中数据库名为userDb,建立一个表userInfo,里面设置两个字段一个为

如何做好Flex与Java交互

三种flex4与Java顺利通信的方式是: flex与普通java类通信RemoteObject: flex与服务器交互HTTPService: flex与webservice交互WebService. 当大家尝试使用flex与普通java类通信时,一般用RemoteObject,具体的代码段如下: package com.flex.demo; /** *第一种  功能描述:该类用来实现flex与普通java类中的方法通信 * @author Administrator */ //以上是打头的功

Flex和java的socket通信(一)连接

服务端:java jdk1.5 (使用工具:eclipse3.2) 客户端:flex 2 (一)连接 目的:实现flex和java的连接 服务端代码:Server1.java =============================================================================== import java.net.*; import java.io.*; public class Server1 { public static void mai

用于Flex和Java快速开发的Flamingo项目

Exadel的Flamingo项目是一个快速启动后台使用Java构建的RIA应用的工具.在中间层,该工具对Seam和Spring都提供了支持.在 展现层,Flamingo既支持Flex也支持JavaFX.该工具启动应用程序开发的方式与AppFuse项目类似,后者可用于更传统的Java Web层框架.InfoQ与Exadel的Igor Polevoy和Fima Katz进行了交谈以了解更多关于Flamingo的信息. Igor和Fima以分享Flamingo的特性细节作为开场白.现在的特性可以被划

Flex与Java通信框架搭建的步骤

Flex与Java通信框架搭建的步骤: 1. 新建web项目,并启动tomcat运行,检查一切是否正常(必须); 2. 导入所需的jar包(我已给出),将需要用的四个XML资源文件:messaging-config.xml,proxy-config.xml,remoting-config.xml,services-config.xml全部复制粘贴到项目的WEB-INF文件夹下,如下图所示: 3. 修改web.xml文件:将如下内容全部粘贴到web.xml中,不需做任何的更改即可; flex.cl

Flex结合java实现一个登录功能

转自http://www.cnblogs.com/kunpengit/archive/2011/12/06/2277657.html Flex结合java实现一个登录功能 1.  环境的搭建: s 对message-congig.xml配置如下: <?xml version="1.0" encoding="UTF-8"?> <service id="remoting-service"     class="flex.m

前端flex后台java的两个独立项目在myeclipse中如何部署到tomcat

问题描述 前端flex后台java的两个独立项目在myeclipse中如何部署到tomcat 我是刚接触前段用flex后台用java的项目,在Myeclipse中分别导入项目后,两个项目怎么编译?以及在deploy project,弹出来的窗口中选择框里没有我刚才导入的那个项目.请问这样的项目怎么部署到tomcat中,如果要手动部署怎么部署?我是新手菜鸟,希望大神能帮我指点详细一点,谢谢,谢谢,谢谢............快过年了,祝您,身体健康!阖家欢乐!财源广进! 解决方案 设置不同的端口即

Android WebView上实现JavaScript与Java交互_Android

其实webview加载资源的速度并不慢,但是如果资源多了,当然就很慢.图片.css .js .html这些资源每个大概需要10-200ms ,一般都是30ms就ok了.不过webview是必须等到全部资源都完成加载,才会进行渲染的,所以加载的速度很重要!从Google上我们了解到,webview加载页面的顺序是:先加载html,然后从里面解析出css.js文件和页面上的图片资源进行加载.如果webkit的缓存里面有,就不加载.加载完这些资源之后,就进行css的渲染和js的执行.Css的渲染一般不