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

问题描述 投票:1回答:3

我试图测试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;
            }
        }
    }

RSI满PL.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;

}
java rmi rmic
3个回答
2
投票

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


-1
投票

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

如果仍然无效,请尝试将所需文件复制到桌面上的文件夹中,然后导航并进行测试。


-1
投票

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

  • .;
  • C:\用户\ MyProject的\ myCustomCompiledClasses

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

© www.soinside.com 2019 - 2024. All rights reserved.