我遇到了JGroups的问题,在构建我的项目之后,运行它会产生这个错误:
Caused by: java.lang.ClassNotFoundException: org.jgroups.ReceiverAdapter
我的班级看起来像这样 -
import org.jgroups.ReceiverAdapter;
import org.jgroups.Channel;
import org.jgroups.JChannel;
public class MyClass extends ReceiverAdapter implements MyInterface {
Channel channel;
String state = "state";
public MyClass() {
super();
start();
}
public void start() {
try {
channel = new JChannel();
channel.setReceiver(this);
channel.connect("ServerCluster");
channel.getState(null, 0);
System.out.println("Connected to cluster");
} catch (Exception e) {
System.out.println("Failed to connect to cluster");
}
}
public void getState(OutputStream output) throws Exception {
System.out.println("get response");
}
public void setState(InputStream input) throws Exception {
System.out.println("set test");
}
}
从IntelliJ运行项目不会产生任何错误,但也不会从getState()
和setState()
生成所需的打印件。我尝试在Eclipse IDE中创建一个全新的项目,但同样也在那里发生。连接工作正常,状态是我项目的新增功能。
从命令行运行java MyClass
会触发此问题开头的错误。 JGroups jar似乎正在org.jgroups.Channel
正确地添加到类路径中,并且org.jgroups.Channel
(等等)正在被找到。
JGroup开发者提供了一个SimpleChat程序,但是当我为此创建一个新项目时遇到了同样的问题。
修改
所以事实证明我必须在从CLI运行时显式设置类路径。但是,在运行代码时,似乎永远不会调用getState()
和setState()
方法,因为没有print语句。 SimpleChat
不会像我们想要的那样打印received state...
。
有没有人有解决方案?
最佳。
答案 0 :(得分:1)
所以,我在JChannel上使用的是RpcDispatcher,似乎我不能在同一个频道上使用调度程序和getState()
和setState()
方法。简单的解决方案:创建第二个渠道。似乎我对JGroups的基本原理缺乏了解!