我应该如何解析java.lang.IllegalArgumentException:protocol=https host=null异常?

我应该如何解析java.lang.IllegalArgumentException:protocol=https host=null异常?,java,exception,ssl,stream,Java,Exception,Ssl,Stream,我正在开发一个SSL客户机-服务器程序,我必须重用以下方法 private boolean postMessage(String message){ try{ String serverURLS = getRecipientURL(message); serverURLS = "https:\\\\abc.my.domain.com:55555\\update"; if (serverURLS != null){

我正在开发一个SSL客户机-服务器程序,我必须重用以下方法

private boolean postMessage(String message){
    try{ 
         String serverURLS = getRecipientURL(message);

         serverURLS = "https:\\\\abc.my.domain.com:55555\\update";

         if (serverURLS != null){
             serverURL = new URL(serverURLS);
         }

        HttpsURLConnection conn = (HttpsURLConnection)serverURL.openConnection();

        conn.setHostnameVerifier(new HostnameVerifier() { 
        public boolean verify(String arg0, SSLSession arg1) {
            return true;
        } 
        });

        conn.setDoOutput(true);

        OutputStream os = conn.getOutputStream();

        OutputStreamWriter wr = new OutputStreamWriter(os);

        wr.write(message);

        wr.flush();

        if (conn.getResponseCode() != HttpsURLConnection.HTTP_OK)
            return false;
        else
            return true;

    }
这里ServerURL初始化为

private URL serverURL = null;
当我尝试执行这个方法时,我在第行得到一个异常

OutputStream os=conn.getOutputStream()

例外是

java.lang.IllegalArgumentException: protocol = https host = null
原因是什么?

URL使用前斜杠(/),而不是后斜杠(如windows)。尝试:


出现错误的原因是URL类无法解析字符串的主机部分,因此,
host
null

此代码似乎完全没有必要:

String serverURLS = getRecipientURL(message);

serverURLS = "https:\\\\abc.my.domain.com:55555\\update";

if (serverURLS != null){
    serverURL = new URL(serverURLS);
}
  • serverurl
    被分配了
    getRecipientURL(消息)
  • 然后立即覆盖
    serverurl
    的值,使前面的语句成为
  • 然后,因为
    if(serverURL!=null)
    的计算结果为
    true
    ,因为您在前面的语句中刚刚给变量赋值,所以您给
    serverURL
    赋值。如果(serverurl!=null)计算为
    false
    ,则
    是不可能的
    
  • 在前一行代码之外,您永远不会实际使用变量
    serverurl
  • 您可以将所有这些替换为:

    serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update");
    

    可能对其他人有所帮助-我来这里是因为我错过了在http://后面加两个//的机会。这就是我所拥有的:

    http://abc.my.domain.com:55555/update


    您好,我添加这行只是为了检查错误的原因。实际上,URL是使用消息过滤的。请注意,ServerURL的分配是一个测试行:)
    serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update");