我通过我的ice文件生成了ZeroC类。在它上面,有两个类:" Device"和DeviceServer类,它只是第一个的数组。该数组由DevicePrx构成,但是当我想要构建第一个类以构建数组时,就会出现问题。这是服务器的Ice.Application:
public class Server extends Ice.Application {
public int run(String[] args) {
shutdownOnInterrupt();
Ice.ObjectAdapter oa = communicator().createObjectAdapter("Servidor");
Ice.ObjectPrx prx1 = oa.add(new DeviceI("descripción", DeviceStatus.DEVICEON), Ice.Util.stringToIdentity("Device1"));
Ice.ObjectPrx prx2 = oa.add(new DeviceI("descripción2", DeviceStatus.DEVICEON), Ice.Util.stringToIdentity("Device2"));
DevicePrx [] oprx = new DevicePrx[2];
oprx[0] = (DevicePrxHelper) prx2;
DeviceServerI ds = new DeviceServerI(oprx);
System.out.println(communicator().proxyToString(prx1) + " \n"+communicator().proxyToString(prx2));
oa.activate();
communicator().waitForShutdown();
return 0;
}
那个演员没有用。当我执行该类时,它显示以下错误:
!! 15/11/14 11:58:37:119 Servidor:错误:主要:未知异常: java.lang.ClassCastException:无法转换Ice.ObjectPrxHelperBase 到ITSUE.DevicePrxHelper 在Server.run(Server.java:13) 在Ice.Application.doMain(Application.java:214) 在Ice.Application.main(Application.java:194) 在Ice.Application.main(Application.java:71) 在Server.main(Server.java:26)
问题是:我如何转换设备对象来构建数组?
ICE文件:
module ITSUE {
enum DeviceStatus {
DEVICEON,
DEVICEOFF
};
class Device {
["private"] string description;
["private"] DeviceStatus status;
void setStatus(DeviceStatus ns);
DeviceStatus getStatus();
string getDescription();
void on();
void off();
};
sequence<Device *> DeviceSeq;
class DeviceServer {
["private"] DeviceSeq devices;
DeviceSeq listDevices();
};
};
非常感谢!
答案 0 :(得分:0)
我自己解决了我的问题。如果有人遇到同样的问题,你必须使用类XXXXPrxHelper中的checkedCast或uncheckedCast方法进行强制转换。就我而言:DevicePrxHelper.checkedCast()