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行目だとわかる。