42

次の簡単なコードがあります。

import java.io.*;
class IO {
    public static void main(String[] args) {    
       BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
       String userInput;    
       while ((userInput = stdIn.readLine()) != null) {
          System.out.println(userInput);
       }
    }
}

そして、次のエラーメッセージが表示されます。

----------
1. ERROR in io.java (at line 10)
    while ((userInput = stdIn.readLine()) != null) {
                        ^^^^^^^^^^^^^^^^
Unhandled exception type IOException
----------
1 problem (1 error)roman@roman-laptop:~/work/java$ mcedit io.java 

誰にも理由はありますか?sum Web サイト ( here )にあるコードを単純化しようとしました。私は単純化しすぎましたか?

4

6 に答える 6

69

メイン メソッドに「throws IOException」を追加する必要があります。

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

JLSでチェック例外 (Java に固有) についてもう少し読むことができます。

于 2010-02-21T13:18:49.953 に答える
51

Javaには「チェック例外」という機能があります。つまり、特定の種類の例外、つまり、Exception をサブクラス化するが RuntimeException をサブクラス化しない例外が存在することを意味します。たとえば、メソッドがそれらをスローする可能性がある場合は、スロー宣言にそれらをリストする必要があります。たとえば、void readData() は IOException をスローします。IOException はその 1 つです。

したがって、スロー宣言で IOException をリストするメソッドを呼び出す場合は、それを独自のスロー宣言でリストするか、キャッチする必要があります。

チェック例外が存在する理由は、一部の種類の例外については、発生する可能性があるという事実を無視してはならないということです。なぜなら、それらの発生はプログラム エラーではなく、ごく普通の状況だからです。そのため、コンパイラは、そのような例外が発生する可能性を忘れないようにするのに役立ち、何らかの方法でそれを処理する必要があります。

ただし、Java 標準ライブラリのすべてのチェック済み例外クラスがこの理論的根拠に当てはまるわけではありませんが、それはまったく別のトピックです。

于 2010-02-21T13:23:49.357 に答える
14

次のコード スニペットでもう一度お試しください。

import java.io.*;

class IO {
    public static void main(String[] args) {    
        try {
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
            String userInput;    
            while ((userInput = stdIn.readLine()) != null) {
                System.out.println(userInput);
            }
        } catch(IOException ie) {
            ie.printStackTrace();
        }   
    }
}

を使用するtry-catch-finallyよりも使用する方がよいthrows。を使用すると、エラーの検出とデバッグが容易になりますtry-catch-finally

于 2010-02-21T15:01:43.173 に答える
0

キーボードからの入力の読み取りは、インターネットからのファイルのダウンロードに似ています。Java io システムは、InputStream または Reader を使用して読み取られるデータのソースとの接続を開きます。IOExceptions を使用して接続が切断される可能性がある状況を処理する必要があります。

InputStreams と BufferedReader を使用することの正確な意味を知りたい場合は、このビデオで説明しています

于 2013-01-21T01:27:52.823 に答える
0

例外をキャッチしていたにもかかわらず、エラーが発生しました。

    try {
        bitmap = BitmapFactory.decodeStream(getAssets().open("kitten.jpg"));
    } catch (IOException e) {
        Log.e("blabla", "Error", e);
        finish();
    }

問題は、IOException がインポートされなかったことです。

import java.io.IOException;
于 2021-02-26T15:28:35.687 に答える