我有一个应用程序,我一直在尝试使用Java 8的RMI。我在Windows 10上使用eclipse Neon.3,它抱怨我没有实现不存在的接口方法。在试图缩小一个单独的问题时,我已经注释掉了界面的一种抽象方法。
在注释掉一个抽象方法之后,接口被导出到一个jar文件中;然后将jar文件添加到将实现该接口的服务器应用程序的构建路径中。
界面:
package accessService;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.HashMap;
public interface ApplicationAccessService extends Remote{
//public void connectClient(Long[] clientId) throws RemoteException;
public HashMap<String, Long> getClientConnections() throws RemoteException;
public HashMap<String, Integer> getServerConnections() throws RemoteException;
}
实施班:
package iap.util;
import java.rmi.RemoteException;
import java.util.HashMap;
import accessService.ApplicationAccessService;
public class RemoteIAP implements ApplicationAccessService{
private final static HashMap<String, Integer> SERVERS = new HashMap<>();
private final static HashMap<String, Long> CLIENTS = new HashMap<>();
public RemoteIAP(){ }
//methods used by RMI interface--------------------------------------
@Override
public HashMap<String, Integer> getServerConnections() throws RemoteException {
return SERVERS;
}
@Override
public HashMap<String, Long> getClientConnections() throws RemoteException {
return CLIENTS;
}
//end RMI methods-------------------------------------------------------
}
错误:
The type RemoteIAP must implement the inherited abstract method ApplicationAccessService.connectClient(Long[])
在我看来,在评论出有问题的方法之前,日食会以某种方式维护文物。重新启动eclipse并重新启动我的电脑没有改变这种行为。我不知道这是不是java的问题,我是使用eclipse中的上下文菜单将界面添加到构建路径的方式,还是其他什么?
答案 0 :(得分:1)
我认为取出线然后导出可能会失败。理解.jar中,编译的.class文件中的代码很重要,而不是.java文件中的代码。因此,如果您在导出之前没有重新编译,则可以在.jar中使用旧版本
答案 1 :(得分:1)
有时,ide可以读取旧编译的.class
文件,并且在构建操作之后它不会以新文件替换。
更改班级名称并重新构建。