繁体   English   中英

Java InputStream NullPointerException与InputStream

[英]Java InputStream NullPointerException with InputStream

我在课堂上有两种方法:

  private static InputStream getSongStream(String ip, String id){
      try {
        URL url = new URL("http://"+ ip + "/" + Client.streamphp);
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);

        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data); //Data is a simple Http Post that is know to work
        wr.flush();
        wr.close();

        return conn.getInputStream();

    } catch (MalformedURLException badurl) {
        System.out.println(badurl);
        return null;
    } catch (IOException noconnection) {
        System.out.println(noconnection);
        return null;
    }
  }

  public static void downloadSong(String ip, String id, String path){
      InputStream rd = Client.getSongStream(ip, id);
      try {
          OutputStream stream = new FileOutputStream(new File(path));

          byte[] buffer = new byte[4096];
          int len;
          while ((len = rd.read(buffer)) > 0) { //Here I get NullPointerException
             stream.write(buffer, 0, len);
          }
          stream.close();
          rd.close();

     } catch (IOException noconnection) {
          System.out.println(noconnection);
        }
  }

第二种方法中注释的一行是问题,如果我将所有方法都放在同一方法中,则可以毫无问题地下载歌曲,但如果我将它们分开,则不会。

有任何想法吗? 我想将它们分开以重用getSongStream。

问题是您正在吞没getSongStream异常并返回null。 不要那样做-让异常传播出去,可能将其包装为其他形式...因此声明您的方法可以抛出(例如) IOException 您的downloadSong方法可能应该声明它也可以引发IOException 请注意,即使抛出异常,您也应该具有finally块以确保适当关闭流。

捕获异常,将其写到标准输出中,然后一切正常就可以了,这几乎总是一个坏主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM