0

チャネルで文字列を公開しようとすると、次のエラーが発生します。

java.lang.AbstractMethodError: org.cometd.client.BayeuxClient$BayeuxClientChannel.publish(Ljava/lang/Object;)V

これは公開しようとしているコードです:

public class EnviadorMensagem implements Runnable {

private String nomeCanal;
private Mensagem mensagem;
private ClientSession cliente;
private boolean pausado = true;
private boolean cancelado = false;

@Override
public void run() {
    while (pausado) {
        pausar();
    }
    if (!cancelado) {
        converterEEnviar();
    }
}

private void pausar() {
    synchronized (this) {
        try {
            this.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

private void converterEEnviar() {
    ConversorMensagem conversor = new ConversorMensagem();
    ClientSessionChannel canal = cliente.getChannel(nomeCanal);
    canal.publish(conversor.converter(mensagem)); //<- the error happens here!!
}

public void ativar() {
    synchronized (this) {
        pausado = false;
        this.notifyAll();
    }
}

public void cancelar() {
    synchronized (this) {
        cancelado = true;
    }
    ativar();
}

public void setNomeCanal(String nomeCanal) {
    this.nomeCanal = nomeCanal;
}

public void setMensagem(Mensagem mensagem) {
    this.mensagem = mensagem;
}

public void setCliente(ClientSession cliente) {
    this.cliente = cliente;
}
}

ご覧のとおり、このクラスは別のスレッドで実行されています。これは私のpom.xmlの一部です:

<dependencies>
    <dependency>
        <groupId>org.cometd.java</groupId>
        <artifactId>cometd-java-client</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.cometd.java</groupId>
        <artifactId>bayeux-api</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-client</artifactId>
        <version>8.1.7.v20120910</version>
    </dependency>
</dependencies>

誰かがそれを解決する方法を知っていますか?

4

1 に答える 1

1

ライブラリのバージョンに対してコードをコンパイルしたときに得AbstractMethodErrorられますが、実行時に、そのメソッドを持たない、または別の署名を持つ別のバージョンを使用しています。

クラスパスと使用しているCometDライブラリのバージョンを再確認してください。

于 2012-12-06T14:27:15.340 に答える