JAVA:RMI回调->;对象已导出

JAVA:RMI回调->;对象已导出,java,callback,server,rmi,stub,Java,Callback,Server,Rmi,Stub,这是我的第一个问题,很抱歉,如果我把它弄错了,我的英语 我必须用java做一个分布式刽子手项目,有客人、玩家和大师(更多比赛)。当一个用户(已经注册)登录自己或当一个主服务器打开一个匹配时,服务器必须通知所有来宾(仅来宾)该事件。 在客户机中,我必须创建两个存根,一个用于服务器,另一个用于图形界面(swing) 线程池用于管理匹配项,现在不使用。 这是客户端代码: 包用户; 公共类Utene扩展RemoteServer实现UserInterface、GraphicInterface、Serial

这是我的第一个问题,很抱歉,如果我把它弄错了,我的英语

我必须用java做一个分布式刽子手项目,有客人、玩家和大师(更多比赛)。当一个用户(已经注册)登录自己或当一个主服务器打开一个匹配时,服务器必须通知所有来宾(仅来宾)该事件。 在客户机中,我必须创建两个存根,一个用于服务器,另一个用于图形界面(swing)

线程池用于管理匹配项,现在不使用。 这是客户端代码:

包用户;
公共类Utene扩展RemoteServer实现UserInterface、GraphicInterface、Serializable{
私有静态最终长serialVersionUID=2L;
私有字符串名称;
私有字符串密码;
私有字符串host=“localhost”;
专用插座soc;
专用int端口=1800;
私有用户接口存根=null;
专用注册表接口服务器\u接口=null;
专用注册表服务器\ U注册表;
公职人员(){
超级();
this.name=“user”;
this.password=“passwd”;
//每个连接服务器
试一试{
server\u registry=LocateRegistry.getRegistry(主机);
server_interface=(RegistryInterface)server_registry.lookup(“HANGMAN-server”);
}捕获(RemoteException | NotBoundException e){
System.out.println(“错误连接lato客户端”);
e、 printStackTrace();
}
//每l'rmi con la gui
}
公共同步布尔登录(字符串n,字符串p)引发RemoteException{
布尔值esito=false;
出口();
esito=服务器界面登录(n、p、存根);
返回esito;
}
公共同步布尔注销()引发RemoteException{
布尔值esito=false;
esito=服务器\接口。注销(名称、存根);
返回esito;
}
公共同步的void notifyMatch(ArrayList lista_partite)引发RemoteException{
if(lista_partite!=null){
if(lista_partite.size()=0){
系统输出打印(Ancora nessuna partita aperta.);
}
否则{

对于(int i=0;i可能,我想我在
ute
类中发现了错误。您在代码中的两个位置导出了对象,这导致
java.rmi.server.ExportException:对象已导出。

在Utente的main()方法中,您有

stubExport = (GraphicInterface)UnicastRemoteObject.exportObject(user,3900);
其中,
用户
是类Utene的对象

另外,在同一类的login()方法中,您正在调用export()方法,该方法包含:-

stub = (UserInterface) UnicastRemoteObject.exportObject(this,0);
在这里,
将与Utente当前调用的对象相关,在这种情况下,该对象将是
用户
,在前面已经导出

因此,您似乎两次导出对象,导致抛出异常


请回答这是否有用。祝你好运!

检查类Utene.java中的第59行和第100行代码,如异常所示:-
Utene.java:59,Utene.login(Utene.java:100)
!让您的客户端扩展
UnicastRemoteObject
,并摆脱这两个
exportObject
调用。您确实需要能够对自己的空指针异常进行排序。显然
server\u接口
为空。不要编辑您的问题以将其转换为全新的问题,尤其是在保留旧标题的情况下。如k一个新问题。我后来想了想,但我觉得也不好“分配”一个新的类似问题。我记得下一次我想用一个解决方案只使用一个接口,所以不需要两个存根。我会在接下来的几天告诉你它是否有效这是一个部分解决方案。如果没有GUI,一切都正常工作,当我尝试使用它时问题就会出现。我用新代码编辑我的答案,一个moment@ghiltanas-正如报告中所建议的那样对问题的评论,我们无法帮助您解决空指针异常。这是GUI代码中的缺陷,而不是RMI中的缺陷。此答案解决了您的问题,因此,此答案是错误的完美解释。请在以后的访问中接受此答案。祝您好运,解决下一个错误。
stub = (UserInterface) UnicastRemoteObject.exportObject(this,0);