我在建立项目后运行它会产生以下错误的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会引发在此问题开始时看到的错误。当找到org.jgroups.Channelorg.jgroups.Channel(以及其他)时,JGroups jar似乎已正确添加到类路径中。

JGroup开发人员提供了一个SimpleChat程序,但是当我为此创建一个新项目时,遇到了相同的问题。

编辑

因此事实证明,从CLI运行时,我必须显式设置类路径。但仍然,当运行代码时,似乎似乎没有调用getState()setState()方法,因为没有打印语句。 SimpleChat不会像预期那样打印received state...

有没有人有办法解决吗?

最好。

最佳答案

因此,在JChannel上,我使用的是RpcDispatcher,看来我不能在同一通道上使用调度程序以及getState()setState()方法。简单的解决方案:创建第二个渠道。似乎缺乏对JGroups基础知识的了解!

关于java - 具有JGroups的ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20485290/

10-10 08:56