RMIC cannot find class although IT IS RIGHT THERE

1.4k Views Asked by At

I am trying to test out RMI of java, but i cannot get the rmic command to work.

Screenshot

Do tell if you need my code, although i am pretty sure it does not matter, i have implemented the RMI functions correctly.

Server Side Code:

  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");
    }   

Client Side Code:

@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 (interface):

package testrmi;

import java.rmi.*;

public interface RemoteService extends Remote {

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

}
3

There are 3 best solutions below

5
On

Seems like the file can't be found in this case. Try typing dir in the cmd to see if your folder is there. You can also navigate into the testrmi folder and type rmic RSimpl.

If it still doesn't work try copying the files you need into a folder on desktop, navigate there and test.

1
On

Sorry for my stupid question... I did not add classpath as defined in RMIC documentation on oracle. For anyone else facing this problem, open your System Environment Variables and Add those two path variables:

  • .;
  • C:\user\myproject\myCustomCompiledClasses

you MUST add the DOT path variable and also the path to your compiled classes

0
On

The class file for a class named testrmi.RSImpl must be in testrmi/RSImpl.class relative to one of the directories named in the CLASSPATH.