带有JGroups的ClassNotFoundException

时间:2013-12-10 03:10:17

标签: java classpath jgroups

我遇到了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...

有没有人有解决方案?

最佳。

1 个答案:

答案 0 :(得分:1)

所以,我在JChannel上使用的是RpcDispatcher,似乎我不能在同一个频道上使用调度程序和getState()setState()方法。简单的解决方案:创建第二个渠道。似乎我对JGroups的基本原理缺乏了解!