我需要你对JAVA RMI的帮助,我开发了一个用于排序表的示例程序。但我得到了这个例外:
Erreur RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: ServicesTableau
这是我的服务器源代码:
public class Serveur {
public static void main(String args[]) {
try {
System.out.println("Server start ...");
ServicesTableauImpl od = new ServicesTableauImpl();
String url = "rmi://" + args[0] + "/ServicesTableauImpl";
System.out.println("Passe");
Naming.rebind(url, od);
System.out.println("Attente d'invocations de client / CTRL-C pour stopper");
} catch (Exception e) {
System.out.println("Erreur " + e.getMessage());
}
/*
catch(java.net.MalformatedURLException e){
System.out.println("Mauvais nom de serveur");
System.exit(1);
}
catch(RemoteException e){
System.out.println("Pas de Rmiregistry");
System.exit(1);
}
*/
}
}
答案 0 :(得分:13)
该类在RMI注册表的CLASSPATH上不可用。最简单的解决方法是在同一个JVM中启动注册表,通过LocateRegistry.createRegistry().
将结果存储在静态字段中。
答案 1 :(得分:0)
发生这种情况是因为我没有在与服务器相同的目录中运行rmiregistry
。
答案 2 :(得分:0)
我花了几个小时成功地启动了Orcale的简单示例表格!
希望可以帮助您
首先,我在Windows上运行该程序
我完全复制了here上的代码
但是我删除了软件包并将三个.class文件放在一起以说服
如果您对此不熟悉,我希望您也最好这样做
因为进入包裹,问题会更加复杂
要做三个步骤:
1.start rmiregistry
start rmiregistry -J-Djava.class.path=./
用于“远程接口定义”
以便rmiregistry可以找到该类
然后解决ClassNotFoundException
2。运行服务器
start java Server
然后您可以看到输出:
服务器就绪
3.run客户端
java Client
输出:
回应:您好,世界!
然后讨论如何处理包裹
通常是Server.class和interface.class ---“远程接口定义”
应放在同一包装中
您需要知道如何使用包运行.class
java {packagename}.Server
classpath的默认值为“ ./"
和包声明将有助于找到Server.class所需的interface.class
所以我们不需要单独设置-cp
顺便说一句,如果您尝试设置真实的类路径,则会收到错误消息
关于“启动rmiregistry”
它没有默认的类路径
所以我们需要设置
,它应该与类路径的默认值“ ./”相同。
答案 3 :(得分:0)
答案是基于 IDE 的项目。
您需要从构建文件夹中“启动 rmiregistry”。
例如: 在 Intellij
对于 eclipse 我希望它的 build 文件夹
答案 4 :(得分:-1)
在某些情况下,您需要将rmi客户端代码(interface和main)移动到默认包。为服务器端重复它。它可以解决你的问题(rmi中的包装工作并不那么明显)。
答案 5 :(得分:-3)
此错误是因为没有编写安全管理器代码,因此无法加载类。
因此,请确保为安全管理器添加代码。
如果编译器找不到安全管理器,则创建一个新的。在main方法中添加代码。
if (System.getSecurityManager() == null) then
System.setSecurityManager(new RMISecurityManager())