Java RMI 客户端遇到 ClassCastException

标签 java rmi classcastexception

我在将 RMI 客户端连接到服务器时遇到问题。所以我有这些类/接口(interface):

    package application;

    import java.sql.ResultSet;

    public interface InterfaceRMI {

        public void insererEtudiant(String requete);
        public void supprimerEtudiant(String requete);
        public ResultSet selectionnerEtudiant(String requete);
    }

服务器类:

    package application;

    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;

    public class ServeurMySQL extends UnicastRemoteObject implements InterfaceRMI {

        public int port;

        public ServeurMySQL(int port) throws RemoteException {
            this.port = port;
        }


        @Override
        public void insererEtudiant(String requete) {
           // Implementation for insertion 
        }

        @Override
        public void supprimerEtudiant(String requete) {
          // Implementation for delete
        }

        @Override
        public ResultSet selectionnerEtudiant(String requete) {
            // Implementation for selection  
        }
    }

连接测试类:

    package application;

    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;

    public class test {

        public static void main(String[] args) {
             try {          
                Registry r = LocateRegistry.getRegistry(1098);

                InterfaceRMI serveur = (InterfaceRMI) (r.lookup("serveurMySQL"));

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

当我将行 InterfaceRMI serveur = (InterfaceRMI) (r.lookup("serveurMySQL")); 替换为 r.lookup("serveurMySQL"); 我没有得到异常,我知道连接有效,问题只是类型转换。但我不知道如何解决。

异常如下:

    java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to application.InterfaceRMI
at application.test.main(test.java:13)

P.S:RMI 服务器启动没有任何问题。

最佳答案

首先:

 public interface InterfaceRMI 

必须是

 public interface InterfaceRMI extends Remote

第二个:

InterfaceRMI 中的每个方法都必须声明 throws RemoteException

关于Java RMI 客户端遇到 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310135/

相关文章:

java - 增加 Solr 搜索并发度

java - 如何检测 3D 世界中的矩形?

java - 错误 : The column index is out of range: 1, 列数:0

java - MVC 应用程序中的异常和处理 Hibernate 异常

java - RMI程序重新绑定(bind)错误

java - GAE 中的 Hibernate Ehcache 抛出 java.lang.NoClassDefFoundError : java. rmi.server.UID 是受限类

multithreading - RMI线程由于java.lang.OutOfMemoryError : Java heap space而终止

Java 泛型转换,非直接

java.lang.ClassCastException : java. lang.String 无法转换为 [C

arrays - ui :repeat causes java. lang.ClassCastException : [Ljava. lang.Object 中的 UISelectMany;无法转换为 java.util.List