03. キーボードから読み込む(例外を発生) inOut.java

 

 続き。

 

例外を発生させる

「こんにちは。」を入力しリターンすると、「こんにちは。」が出力される。

次に、control + D を入力する。

 $ java inOut
こんにちは。
こんにちは。
例外が発生しました。

 

 例外を表示する

 System.our.printl( e ); を追加して例外を表示させるようにする。

//
// inOut.java
//

public class inOut {
public static void main( String[] args ){
byte[] buff = new byte[ 1024 ]; // 配列の定義をする
int n = 1;

while( n > 0 ) {
try {
n = System.in.read( buff ) ; // キーボード読み込み
System.out.write( buff, 0, n ); // 表示する
if( buff[0] == (byte)'q' ) {
break;
}
} catch( Exception e ) {
System.out.println( "例外が発生しました。");
System.out.println( e ) ; // この行を追加
System.exit( 1 ); // プログラムを終了する
}
}
}
}
 

 

実行

 $ java inOut
こんにちは。
こんにちは。
例外が発生しました。
java.lang.ArrayIndexOutOfBoundsException

 「こんにちは。」を入力後、control + D を入力した。

例外の原因が、「 java.lang.ArrayIndexOutOfBoundsException」と表示される。

 

例外を発生した場所を表示させる

e.printStackTrace(); を追加する。

//
// inOut.java
//

public class inOut {
public static void main( String[] args ){
byte[] buff = new byte[ 1024 ]; // 配列の定義をする
int n = 1;

while( n > 0 ) {
try {
n = System.in.read( buff ) ; // キーボード読み込み
System.out.write( buff, 0, n ); // 表示する
if( buff[0] == (byte)'q' ) {
break;
}
} catch( Exception e ) {
System.out.println( "例外が発生しました。");
System.out.println( e ) ; // この行を追加
e.printStackTrace(); // この行も追加
System.exit( 1 ); // プログラムを終了する
}
}
}
}
 

 

実行

 $ java inOut
こんにちは。
こんにちは。
例外が発生しました。
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:111)
at java.io.PrintStream.write(PrintStream.java:412)
at inOut.main(inOut.java:13)  ← エラーの発生した場所は13行目

 エラーが発せした場所が13行目だとわかる。