【问题标题】:Why an instance of class MqttClient must be enclosed by try/catch?为什么类 MqttClient 的实例必须包含在 try/catch 中?
【发布时间】:2017-01-20 05:25:10
【问题描述】:

我正试图弄清楚。我有这行代码:

MqttClient Client = new MqttClient(Broker, ClientId, Persistence);

但显示“未处理的异常”错误。所以我通过用 try/catch 封闭它来修复它。

 try {
        MqttClient Client = new MqttClient(Broker, ClientId, Persistence);
    } catch (MqttException e) {
        e.printStackTrace();
    }

它确实有效,但不明白为什么需要这样做。提前致谢。

【问题讨论】:

  • 根据 javadocs 抛出:java.lang.IllegalArgumentException - 如果 URI 不以“tcp://”、“ssl://”或“local://”开头。 java.lang.IllegalArgumentException - 如果 clientId 为 null 或长度大于 65535 个字符 MqttException - 如果遇到任何其他问题

标签: java mqtt iot paho


【解决方案1】:

实例不需要被try/catch包围,但构造函数调用需要,否则需要在声明为抛出的方法中那个例外。

【讨论】:

    【解决方案2】:

    正如一些答案所暗示的那样。我检查了类定义,以下构造函数在哪里:

    public MqttClient(String serverURI, String clientId) throws MqttException {
        this(serverURI,clientId, new MqttDefaultFilePersistence());
    }
    
    public MqttClient(String serverURI, String clientId, MqttClientPersistence persistence) throws MqttException {
        aClient = new MqttAsyncClient(serverURI, clientId, persistence);
    }
    

    两者都抛出 MqttException,这是另一个扩展 Exception 的类。非常感谢。

    【讨论】:

    • '提示由一些答案'。摆脱它。答案和 cmets 明确说明
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2015-12-29
    • 2019-03-15
    • 2023-02-20
    相关资源
    最近更新 更多