虽然它是正确的,但RMIC找不到课程

时间:2017-07-17 10:55:27

标签: java rmi rmic

我正在尝试测试java的RMI,但我无法让rmic命令工作。

Screenshot

告诉你是否需要我的代码,虽然我很确定无关紧要,但我已正确实现了RMI功能。

服务器端代码:

  public static void main(String[] args)
    {
        try {
            Registry r = LocateRegistry.getRegistry();
            r.bind("RService", new RSimpl());
        }
        catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("Cannot Start Remote Service");
        }
        System.out.println("Remote Service Is Running");
    }   

客户端代码:

@SuppressWarnings("deprecation")
    public Object[] getServiceList()
    {
        boolean connectionsuccess = false;
        Object[] objList = null;
        try {
            System.setSecurityManager(new RMISecurityManager());
            server = (RemoteService) Naming.lookup("rmi://192.168.1.77/RService");
            connectionsuccess = true;
        }
        catch(Exception ex) {
            Object[] options = {"Retry","Cancel"};
            int o = JOptionPane.showOptionDialog(frame, "Cannot Establish Connection To The Server. \n Do You Want To Retry?", "Connection Error", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, options, options[0]);
            if(o==0)
            {
                i=0;
                attemptConnect();
            }
            else
            {
                i=1;
                return error;
            }
        }
    }

RSimpl.java:

    package testrmi;

import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.*;
import java.util.*;

public class RSimpl extends UnicastRemoteObject implements RemoteService {

    HashMap map;

    public RSimpl() throws RemoteException
    {
        setUpServices();
    }

    public void setUpServices()
    {
        map = new HashMap();
        map.put("Dice Roll Service", new DiceRoll());
        map.put("Calculator Service", new Calculator());
        // Keep Adding Services On The Go!
    }

    public Object[] getServiceList()
    {
        return map.keySet().toArray();
    }

    public Service getService(Object SvcKey)
    {
        Service theService = (Service) map.get(SvcKey);
        return theService;
    }

    public static void main(String[] args)
    {
        try {
            Registry r = LocateRegistry.getRegistry();
            r.bind("RService", new RSimpl());
        }
        catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("Cannot Start Remote Service");
        }
        System.out.println("Remote Service Is Running");
    }   
}

RemoteService.java(接口):

package testrmi;

import java.rmi.*;

public interface RemoteService extends Remote {

    public Object[] getServiceList() throws RemoteException;
    public Service getService(Object SvcKey) throws RemoteException;

}

3 个答案:

答案 0 :(得分:2)

名为testrmi.RSImpl的类的类文件必须相对于CLASSPATH中指定的其中一个目录位于testrmi/RSImpl.class

答案 1 :(得分:-1)

似乎在这种情况下无法找到该文件。 尝试在cmd中键入dir以查看您的文件夹是否存在。 您还可以导航到testrmi文件夹并输入rmic RSimpl。

如果仍然无法正常工作,请尝试将您需要的文件复制到桌面上的文件夹中,然后在那里导航并进行测试。

答案 2 :(得分:-1)

对不起我的愚蠢问题...... 我没有在oracle的RMIC文档中定义类路径。 对于遇到此问题的任何其他人,请打开系统环境变量并添加这两个路径变量:

  • ;
  • C:\用户\ myproject的\ myCustomCompiledClasses

你必须添加DOT路径变量以及编译类的路径