我是.NET开发人员,但我遇到的问题与.NET无关
即使我的问题听起来很微不足道,请记住这一点。
这是我的问题:
我们在浏览器中有一个swf,它与java扩展通信 它使用Smartfox Server(用于MMO应用程序)
完成从swf我们在动作脚本(3)中抓取屏幕的一部分作为“字节数组”。 在Java中,我们调用一个函数将ByteArray转换为Image然后保存它。
我们的Java开发人员遇到错误
<德尔> java.lang.IllegalArgumentException异常德尔>
执行java函数时。
基本上,我想知道的是:
如何从Java中的ActionScript接受对象类型字节数组?
什么是在ActionScript中映射到字节数组的Java对象类型?
我敢说,转换部分很简单。
更新:
ActionScript Section中的代码
public function savePhoto(uName:String, ba:ByteArray, descr:String):void{
var obj:Object = {};
obj.arr = ba;
obj.desc = descr;
sfsConnectobj.photoSectionSave(obj,"save");
}
public function photoSectionSave(targetObject:Object,type:String) {
sfs.sendXtMessage("trialjava", "save", targetObject);
}
第一个函数调用Java中的SmartFox扩展。 扩展名是“trialjava.js”
接受该功能的Java代码是
public void handleRequest(String cmd, ActionscriptObject ao, User u, int fromRoom)
{
try {
ActionscriptObject arr = ao.getObj("arr");
String dirName="C:\\";
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos;
oos = new ObjectOutputStream(bos);
oos.writeObject(ao.getObj("arr"));
oos.flush();
oos.close();
bos.close();
byte [] data = bos.toByteArray();
BufferedImage imag=ImageIO.read(new ByteArrayInputStream(data));
ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
}
catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Array reading not succesful. Error is: "+e);
}
}
似乎在通过java检索对象时存在一些小的不匹配。
现在错误不同了。
数组读数不成功。错误是: java.io.NotSerializableException: it.goto andplay.smartfoxserver.lib.ActionscriptObject
的问候,
naveenj
答案 0 :(得分:2)
flash.utils.ByteArray
映射到Java的byte[]
类型。
答案 1 :(得分:0)
我不确定这是否是一个问题,但根据Flash安全模型,如果SWF从其他主机/域加载媒体,那么屏幕捕获将导致错误。 你能检查收到的字节数组吗?它的大小是多少?并尝试打印它的起始值。
答案 2 :(得分:-1)
不直接接收字节数组。它来自一个AS对象。这里真正的问题是如何将ActionScript对象中的这个字节数组转换为Java字节数组对象。
我是上述Java开发人员,我正在这样做。