1

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.Channelorg.jgroups.Channel(とりわけ) 検出されています。

JGroup 開発者が提供するSimpleChatプログラムがありますが、このために新しいプロジェクトを作成したときに、同じ問題が発生しました。

編集

そのため、CLI から実行するときはクラスパスを明示的に設定する必要があることがわかりました。それでも、コードを実行すると、print ステートメントがないため、getState()andsetState()メソッドが呼び出されないように見えます。SimpleChat意図したとおりに印刷されませんreceived state...

誰にも解決策がありますか?

一番。

4

1 に答える 1

1

そのため、私は RpcDispatcher を使用していた JChannelで、同じチャネルでディスパッチャgetState()とメソッドを使用できないようです。setState()簡単な解決策: 2 番目のチャネルを作成します。JGroups の基礎に関する私の知識が不足しているようです!

于 2013-12-10T13:00:43.890 に答える