【问题标题】:Connecting to java RMI server连接到 java RMI 服务器
【发布时间】:2013-03-20 00:14:48
【问题描述】:

我是 Java RMI 的新手,我正在按照教程学习它。它使用服务器,代码清单如下所示,用于访问服务器

  1. CalculatorServer.java

     public class CalculatorServer {
            public CalculatorServer(){
                try {
                    Calculator c = new CalculatorImpl();
                    Naming.rebind("rmi://localhost:1099/CalculatorService", c);
                } catch (Exception e) {
                    System.out.println("Trouble"+e);
                }
            }
            public static void main(String args[]){
                new CalculatorServer();
            }
        }
    
  2. CalculatorImpl.java

     public class CalculatorImpl extends UnicastRemoteObject implements Calculator {
    
        //constructor
        public CalculatorImpl() throws RemoteException {
            super();
        }
    
        //@Override
        public long add(long a, long b) throws RemoteException {
            return a + b;
        }
    
        //@Override
        public long sub(long a, long b) throws RemoteException {
            return a - b;
        }
    
        //@Override
        public long mul(long a, long b) throws RemoteException {
            return a * b;
        }
    
       // @Override
        public long div(long a, long b) throws RemoteException {
            return a / b;
        }
    }
    

3.Calculator.java

  public interface Calculator extends Remote{
    public long add(long a, long b) throws RemoteException;
    public long sub(long a, long b) throws RemoteException;
    public long mul(long a, long b) throws RemoteException;
    public long div(long a, long b) throws RemoteException;
  }

当我调试程序时,这是 netbeans ide 控制台的错误; 它说这个错误:Troublejava.rmi.ServerException:RemoteException发生在服务器线程中;嵌套异常是: java.rmi.UnmarshalException:解组参数错误;嵌套异常是: java.lang.ClassNotFoundException: rmi.Calculator

【问题讨论】:

  • rmiregistry 的类路径中必须有接口类。
  • 可以发一下客户端代码吗?

标签: java netbeans rmi


【解决方案1】:

听起来您没有运行 RMI 注册表,它是一个独立于 CalculatorServer 程序的进程。它位于您的 java bin 目录中。请稍等片刻,然后再次尝试您的代码。

【讨论】:

  • 我该如何启动它以便我可以再试一次?
  • 要启动 RMI 注册表,您必须找到“rmiregistry.exe”,它位于您的 Java 目录中。如果您找不到它,请尝试搜索它(可能在您的 C 盘上)。
  • 感谢路径问题,它对我帮助很大,现在服务器已启动,我已经编辑了问题并添加了更多模块以明确错误
  • 不运行 RMI 注册表不会导致 ClassNotFoundExceptions。 -1
  • 这个答案是在 Alphy 编辑添加他的异常问题之前编写的。事实上,他的第一个问题是他没有运行 RMI 注册表。至于 Alphy 的新问题,我会在eg.bucknell.edu/~cs379/DistributedSystems/rmi_tut.html 为您指出一个体面的指南。它讨论了如何使 RMI 注册表可以访问您的类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多