我正在尝试测试java的RMI,但我无法让rmic命令工作。
告诉你是否需要我的代码,虽然我很确定无关紧要,但我已正确实现了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;
}
答案 0 :(得分:2)
名为testrmi.RSImpl
的类的类文件必须相对于CLASSPATH中指定的其中一个目录位于testrmi/RSImpl.class
。
答案 1 :(得分:-1)
似乎在这种情况下无法找到该文件。 尝试在cmd中键入dir以查看您的文件夹是否存在。 您还可以导航到testrmi文件夹并输入rmic RSimpl。
如果仍然无法正常工作,请尝试将您需要的文件复制到桌面上的文件夹中,然后在那里导航并进行测试。
答案 2 :(得分:-1)
对不起我的愚蠢问题...... 我没有在oracle的RMIC文档中定义类路径。 对于遇到此问题的任何其他人,请打开系统环境变量并添加这两个路径变量:
你必须添加DOT路径变量以及编译类的路径