Исключение класса, не найденное при запуске подписчика клиента Paho MQTT

#java

#java

Вопрос:

Я пытаюсь реализовать Pub-Sub, используя пакеты в org.eclipse.paho.client.mqttv3-1.2.0.jar

Ниже приведен код подписчика:

 import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import java.net.*;

public class Subscriber {
  //public static final String BROKER_URL = "tcp://iot.eclipse.org:1883";
  public static final String BROKER_URL = "tcp://localhost:1883";
  private MqttClient client;
  String topic = "Demo Topic";

  public static void main(String[] args) {
    System.out.println("MQTT Broker: "   BROKER_URL);
    new Subscriber();
  }

  public Subscriber() {
    String clientId = getMacAddress()   "-sub";
    System.out.println("Client ID = "   clientId);
    try   {
      client = new MqttClient(BROKER_URL, clientId);
      client.connect();
      client.setCallback(new SubscribeCallback());
      client.subscribe(topic);
    } catch (MqttException e) {
      e.printStackTrace(); System.exit(1);
    }
  }

  public byte[] getMacAddress(){
    byte[] mac = new byte[6];
    try{
      InetAddress address = InetAddress.getLocalHost();
      NetworkInterface nwi = NetworkInterface.getByInetAddress(address);
      mac = nwi.getHardwareAddress();
      System.out.println(mac);
    } catch(Exception e) {
      System.out.println(e);
    }
    return mac;
  }
}

class SubscribeCallback implements MqttCallback {
  @Override
  public void connectionLost (Throwable cause) { }
  @Override
  public void messageArrived (String topic, MqttMessage message) {
    System.out.println("Message arrived. Topic: "   topic
      " Message: "   message.toString());
    if ("I'm gone".equals(topic)) {
      System.out.println("Sensor gone!");
    }
  }
  @Override
  public void deliveryComplete (IMqttDeliveryToken token) { }
}
  

Я создал файл .class, выполнив следующую команду ниже

 javac -cp org.eclipse.paho.client.mqttv3-1.2.0.jar Subscriber.java
  

Файл класса был создан без каких-либо ошибок. Затем я попытался запустить класс Subscriber с помощью

 java -cp org.eclipse.paho.client.mqttv3-1.2.0.jar Subscriber
  

Я получаю исключение класса, не найденное для подписчика

 Error: Could not find or load main class Subscriber
Caused by: java.lang.ClassNotFoundException: Subscriber
  

Примечание: Оба subscriber.java и org.eclipse.paho.client.mqttv3-1.2.0.jar находятся в том же каталоге

Ответ №1:

Вам также необходимо добавить текущий каталог в путь к классу

 java -cp .:org.eclipse.paho.client.mqttv3-1.2.0.jar Subscriber
  

Измените : на ; , если выполняется в Windows.