为了账号安全,请及时绑定邮箱和手机立即绑定

连接到 Mqtt 在线代理时出现 NullPointerException

连接到 Mqtt 在线代理时出现 NullPointerException

弑天下 2022-07-20 12:21:39
我正在尝试使用下面的代码和 Java 中的 Paho 库连接到在线代理https://test.mosquitto.org/ :private final String brokerURI = "test.mosquitto.org:1883"; //should be changed to 8883 with SSLtry { //tentativo di creazione del client        client = new MqttClient(brokerURI, idClient); <--NullPointerException here        client.setCallback(new ClientCallback(codaTopic, codaMessaggi, finestra)); //set delle callback        setConnectionOptions(); //set delle opzioni connessione        client.connect(opzioni); //connessione al server    } catch (MqttException e) {        System.err.println(e.getMessage());        System.err.println("Connessione fallita Client, riavviare il sistema.");    }连接选项在这里设置:    private void setConnectionOptions() {    opzioni = new MqttConnectOptions();    opzioni.setAutomaticReconnect(true);    opzioni.setCleanSession(false);    opzioni.setConnectionTimeout(30);    opzioni.setKeepAliveInterval(60);}但它NullPointerException在创建MqttClient. 特别是控制台显示:Exception in thread "Thread-3" java.lang.NullPointerExceptionat org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateURI(MqttConnectOptions.java:489)at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:291)at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:185)at org.eclipse.paho.client.mqttv3.MqttClient.<init>(MqttClient.java:226)at org.eclipse.paho.client.mqttv3.MqttClient.<init>(MqttClient.java:138)at client.Client.run(Client.java:78)我如何设法连接和使用 SSL?网上冲浪没有任何教程或指南有用,我已经下载了mosquitto.org.crtSSL 连接文件,但我不知道在哪里使用它,也没有找到教程。编辑将 BrokerUri 更改为private final String brokerURI = "tcp://test.mosquitto.org:1883"; //indirizzo broker在尝试使用指令订阅主题时client.subscribe(topic, 1);主题参数是一个包含主题名称的字符串。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

Mosquitto 的 URI 需要协议。看看它的源代码,这是你的异常被抛出的地方,类MqttConnectOpts.java:


protected static int validateURI(String srvURI) {

    try {

        URI vURI = new URI(srvURI);

        if (!vURI.getPath().equals("")) {

            throw new IllegalArgumentException(srvURI);

        }

        if (vURI.getScheme().equals("tcp")) {

            return URI_TYPE_TCP;

        }

        else if (vURI.getScheme().equals("ssl")) {

            return URI_TYPE_SSL;

        }

        else if (vURI.getScheme().equals("local")) {

            return URI_TYPE_LOCAL;

        }

        else {

            throw new IllegalArgumentException(srvURI);

        }

    } catch (URISyntaxException ex) {

        throw new IllegalArgumentException(srvURI);

    }

}

因此,它接受 3 种类型的协议前缀:tcp, ssl, local. 关于您的示例,您可以这样尝试:


TCP


 private final String brokerURI = "tcp://test.mosquitto.org:1883";

SSL


private final String brokerURI = "ssl://test.mosquitto.org:8883";


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 204 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信