Java 代码在Main方法中工作得很好,但当我尝试给出自己的方法时,调用该方法时会出现与ioexception有关的编译器错误

Java 代码在Main方法中工作得很好,但当我尝试给出自己的方法时,调用该方法时会出现与ioexception有关的编译器错误,java,google-maps,ioexception,Java,Google Maps,Ioexception,我提前感谢大家关注这一点,希望这是一个容易回答的问题。我在学习Java的过程中发现了一段很酷的代码 我对它进行了修改,基本上调用了一个Google静态地图,然后将其保存为jpg。使用此代码,它可以完美地工作 现在,这段代码在main方法中运行良好。我想做的是把它放在它自己的方法中,然后从主方法调用它,如下所示: import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.Fil

我提前感谢大家关注这一点,希望这是一个容易回答的问题。我在学习Java的过程中发现了一段很酷的代码

我对它进行了修改,基本上调用了一个Google静态地图,然后将其保存为jpg。使用此代码,它可以完美地工作
现在,这段代码在main方法中运行良好。我想做的是把它放在它自己的方法中,然后从主方法调用它,如下所示:

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;


public class DownloadFile3 {

    public static void main(String[] args)
    {
        getMap();
    }

    public static void getMap() throws IOException
    {        
         String fileName = "mapimg.jpg"; //The file that will be     saved on your computer
         URL link = new     URL("http://maps.googleapis.com/maps/api/staticmap?    center=44.667066,+-90.173632&zoom=13&scale=false&size=600x300&maptype=roa    dmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xff0000%7Cl    abel:0%7C44.667066,+-90.173632"); //The file that you want to download

     //Code to download
         InputStream in = new BufferedInputStream(link.openStream());
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         byte[] buf = new byte[1024];
         int n = 0;
         while (-1!=(n=in.read(buf)))
         {
            out.write(buf, 0, n);
         }
         out.close();
         in.close();
         byte[] response = out.toByteArray();

         FileOutputStream fos = new FileOutputStream(fileName);
         fos.write(response);
         fos.close();
     //End download code

         System.out.println("Finished");

    }

}

如果没有getMap(),它可以正常编译;在main方法中,但当我调用该方法时,我得到以下编译器错误,“DownloadFile3.java:13:error:unreported exception IOException;必须捕获或声明为抛出”


我已经尝试使用try-and-catch语句,并且已经对此进行了几天的研究。我真的被这个问题难住了,我猜这对于一个更有经验的程序员来说是显而易见的。为什么我可以让它在main方法中正常工作,但在它自己的方法中却不工作,并给我那个错误消息?我是否调用了错误的方法,或者发生了什么?非常感谢您在这方面的帮助。

您在这里有一些选择。要么

public static void main(String[] args) throws IOException
{
    getMap();
}


或者捕获并处理
getMap()
方法本身中的任何异常。我个人的选择是第二个或第三个选择;我不喜欢在
main
中包含
throws
子句。

我在intelliJ idea中尝试了以下代码片段,编译得很好。它抛出了一个IOException,这没关系,因为我从服务器得到了400响应代码

public static void main(String[] args)
{
    try {
        getMap();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
还有另一种可能性:

public static void main(String[] args) throws IOException {
    getMap();
}

这两个函数在我的笔记本电脑中都编译正确。

嗯,你是否尝试了调用本身?我用try{}将代码包装在方法中,然后捕获了{//doNothing}。我得到了一系列错误:DownloadFile3.java:43:error:'('expected catch^DownloadFile3.java:44:error:类型{^DownloadFile3.java:44:error:非法开始{^DownloadFile3.java:46:error:')'expected}^DownloadFile3.java:48:error:'^DownloadFile3.java:50:error:解析时到达文件结尾}^DownloadFile3.java:51:error:解析时到达文件结尾你从哪里得到了代码片段?我用intelliJ粘贴了问题代码,得到了一条红色下划线并按照指示进行操作如果我的答案正确,你为什么给我投反对票?“我用intelliJ粘贴了问题代码,画了一条红色下划线,并按照指示进行操作“-始终是第一步。干得好我试着把两者都投赞成票,但因为我是新来的,我不认为是我。我唯一做的另一件事是先检查这个问题的解决方案,但因为我使用了@chieftwoppencils解决方案,所以我检查了那个问题。我认为这样做不应该给-1,但如果给了,我道歉。我最终使用第二个选项在main方法中执行try-and-catch语句。然后它像一个符咒一样编译和运行。我认为我的错误在于我认为catch和try需要在调用的方法中,而不是在调用的方法中。感谢大家的帮助,我将研究每个人的解决方案。可以是任何一种方式。您可以在另一个方法中捕获它们,那么您就不必在那里抛出
,这意味着您也不需要在main中使用它。这取决于你想怎么做@科迪
public static void main(String[] args)
{
    try {
        getMap();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public static void main(String[] args) throws IOException {
    getMap();
}