我正在首先阅读java,我即将尝试使用现成的烘焙代码来展示如何使用RMI。 这些是类:
远程接口
import java.rmi.*;
public interface MyRemote extends Remote {
public String sayHello() throws RemoteException;
}
远程实现
import java.rmi.*;
import java.rmi.server.*;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
public String sayHello() {
return "Server Says,Hello";
}
public MyRemoteImpl() throws RemoteException { }
public static void main(String[] args) {
try {
MyRemote service = new MyRemoteImpl();
Naming.rebind("Remote Hello", service);
} catch(Exception e) {
e.printStackTrace();
}
}
}
然后我将.java和.class文件放在c:\ RMI中。在运行它时,它表示即使我从同一目录运行,也找不到MyRemoteImpl类。我怎样才能解决这个问题?感谢。
编辑:当我尝试运行此命令时出现错误
rmic MyRemoteImpl
答案 0 :(得分:1)
BuddingProgrammer的评论也适用于我。
例如,如果您的类位于文件夹C:\ users \ renato \ workspace \ ADI \ src \ semana5中,您应该转到上面的一个级别: C:\ users \ renato \ workspace \ ADI \ src你应该像这样编译:javac semana5 \ Calculadora.java
要运行RMI,您应在C:\users\renato\workspace\ADI\src
中输入以下命令:
rmic semana5.CalculadoraImp
答案 1 :(得分:0)
如果您没有从包含.class文件的目录运行此命令,那么您应该假设根据您发布的内容没有包语句。如果有一个package语句,则应该从包含最高级别包的目录中运行此命令。
否则您的CLASSPATH环境变量有问题。它应该至少包含“。”,也可能是其他一些东西。作为一种解决方法,你可以采用Isaac的建议,但是当你编译和执行时,你只会遇到同样的问题。
答案 2 :(得分:0)
HelloServer
package HelloServer;
和MyRemote
的顶部添加此包MyRemoteImpl
。javac HelloServer/MyRemote.java
文件夹的目录中写入javac HelloServer/MyRemoteImpl.java
和HelloServer
。rmic HelloServer.MyRemoteImpl
文件夹的目录中写HelloServer
。MyRemoteImpl_stub.class
,你可以度过美好的一天:)PS:包名称与RMI或类中使用的任何对象不同是很重要的。否则你会发生物体碰撞。
答案 3 :(得分:0)
由于我遇到了同样的问题而且这些答案都没有帮助我,我会添加对我有用的东西。我在包含MyRemoteImpl.java的目录中运行rmic MyRemoteImpl并得到了同样的错误。当我在包含MyRemoteImpl.class的目录中运行rmic MyRemoteImpl时,它工作并创建了MyRemoteImpl_Stub.class。我不需要设置CLASSPATH。
答案 4 :(得分:0)
如果该类位于C:/../ src / Assign / implement.class那么
它对我有用
答案 5 :(得分:0)
我有相同的代码,但是在Maven项目中。第一步是使用mvn compile
编译所有代码。请注意,所有已编译的类(在本例中为MyRemoteImpl)都存储在maven项目的目标文件夹中。
下一步是转到cd to \target\classes
文件夹。
最后,使用目标类的标准名称(即类的软件包-rmic my_package1.my_sub_package.MyRemoteImpl
)运行rmic命令。
答案 6 :(得分:0)
我知道我已经晚了大约 8 年,但对于将来可能遇到同样问题的其他任何人,以下对我有用:
在包含您的文件的文件夹中,首先从 javac *.java
开始,然后继续执行 rmic class_name
步骤。这应该会生成存根。
答案 7 :(得分:-1)
尝试添加:
-classpath .
默认情况下,rmic的类路径是从CLASSPATH环境变量派生的(感谢EJP进行更正)。