RMIC не может найти класс, хотя ЭТО ПРАВДА
Я пытаюсь проверить RMI Java, но я не могу заставить команду 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;
}
3 ответа
Файл класса для класса с именем testrmi.RSImpl
должен быть в testrmi/RSImpl.class
относительно одного из каталогов, названных в CLASSPATH.
Похоже, что файл не может быть найден в этом случае. Попробуйте ввести dir в cmd, чтобы увидеть, есть ли там ваша папка. Вы также можете перейти в папку testrmi и набрать rmic RSimpl.
Если это все еще не работает, попробуйте скопировать нужные файлы в папку на рабочем столе, перейдите туда и протестируйте.
Извините за мой глупый вопрос... Я не добавил classpath, как определено в документации RMIC на Oracle. Для всех, кто сталкивается с этой проблемой, откройте переменные системной среды и добавьте эти две переменные пути:
- .
- C:\ пользователь \ MyProject \ myCustomCompiledClasses
вы ДОЛЖНЫ добавить переменную пути DOT, а также путь к вашим скомпилированным классам