Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理IOException_Java_Io - Fatal编程技术网

Java 如何处理IOException

Java 如何处理IOException,java,io,Java,Io,在我的Android Studio项目中,我发现了很多“错误:(38,45)错误:未报告的异常IOException;必须捕获或声明为抛出”错误。如何解决这些错误 这是我的代码: public class ActivityHome extends Activity { private final static String QUEUE_NAME = "AndroidJava"; public void onCreate(Bundle savedInstanceState) {

在我的Android Studio项目中,我发现了很多“错误:(38,45)错误:未报告的异常IOException;必须捕获或声明为抛出”错误。如何解决这些错误

这是我的代码:

public class ActivityHome extends Activity {

    private final static String QUEUE_NAME = "AndroidJava";

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("xx.xx.xx.xx");

        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "Hello Java!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
        System.out.println(" [x] Sent '" + message + "'");

        channel.close();
        connection.close();

    }

}

我建议阅读
ActivityHome.onCreate()
中使用的依赖项的Javadocs,以确定抛出的是什么,尤其是与数据库相关的Javadocs。一旦确定了引发异常的原因,就可以使用如下
try-catch
块来处理可能的问题:

try{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("xx.xx.xx.xx");

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    String message = "Hello Java!";
    channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
    System.out.println(" [x] Sent '" + message + "'");

    channel.close();
    connection.close();
} catch(IOException e) {
    e.printStackTrace() //Or log it to a file, or clean up resources
}
或者
抛出
,强制调用您的方法来处理它:

public onCreate(Bundle savedInstanceState) throws IOException { 
    //body
}

可以帮助确定哪个更适合您的用例。

谢谢Brandon。我不知道为什么IOException只发生在Android studio而不是Eclipse上。实际上,该程序可以在Eclipse上很好地工作。当我在android studio上添加try catch时,比如try{}。。。catch(Exception e){statement1;}结果将是statement1。主要原因是Eclipse代码在调用这些异常的方法中有
抛出异常。你知道我是如何提到
抛出
强制调用方处理异常的吗?处理该错误的方法是错误的,因为它们使用
抛出IOException
,并且编译器正在执行强制您处理异常的任务。在Eclipse中,您通过向调用者抛出异常来处理它,但在Android Studio中没有这样做。错误仍然存在。您在try块中放置了什么?它是否封装了引发
IOException
的所有内容?我编辑了我的答案来演示。谢谢。通过使用您提供的代码,我发现新的错误是:error:(39,23)error:unreportedexceptiontimeoutexception;必须被抓住或宣布被抛出。