【发布时间】:2016-07-21 18:04:01
【问题描述】:
我正在学习如何创建 RMI 项目。
但是当我运行服务器站点时,它有错误。当我运行:rmic CalculatorImpl 时,它只是创建存根,我没有看到 ske。
这是我运行 rmic CalculatorImpl 时的日志:
Warning: generation and use of skeletons and static stubs for JRMP is deprecated. Skeletons are unnecessary, and static stubs have been superseded by dynamically generated stubs. Users are encouraged to migrate away from using rmic to generate skeletons and static stubs. See the documentation for java.rmi.server.UnicastRemoteObject.
当我运行 CalculatorServer 时:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub
这是我的代码:
文件计算器服务器:
public class CalculatorServer {
public CalculatorServer() {
try {
Calculator c = new CalculatorImpl();
Naming.bind("rmi://localhost:1099/CalculatorService", c);
} catch (Exception e) {
System.out.println("Trouble: " + e);
}
}
public static void main(String args[]) {
new CalculatorServer();
}
}
文件计算器:
public interface Calculator extends Remote {
public long add(long a, long b)
throws java.rmi.RemoteException;
}
还有文件CalculatorImpl:
public class CalculatorImpl extends
java.rmi.server.UnicastRemoteObject implements Calculator {
public CalculatorImpl()
throws java.rmi.RemoteException {
super();
}
public long add(long a, long b)
throws java.rmi.RemoteException {
return a + b;
}
}
还有另一个项目中的CalculatorClient:
public class CalculatorClient {
public static void main(String[] args) {
try {
Calculator c = (Calculator)
Naming.lookup(
"rmi://localhost/CalculatorService");
System.out.println( c.add(4, 5) );
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println(
"MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println(
"RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println(
"NotBoundException");
System.out.println(nbe);
}
catch (
java.lang.ArithmeticException
ae) {
System.out.println();
System.out.println(
"java.lang.ArithmeticException");
System.out.println(ae);
}
}
}
所以请帮帮我。谢谢!
【问题讨论】:
-
那一定是老教程了。您不再需要运行
rmic。 -
@erickson 他使用该代码。他需要
super(0);来避免rmic。 -
我试过了,还是报错