2014年05月07日

【Java】eclipseのコンソール画面は遅い?

日々Javaのソースの模写を行って勉強している毎日です。
今日は例外処理の実行で、eclipseのコンソール画面についてです。

javalogo.jpg

現在、Javaのtry文、catch文、そしてfaillay文の例外処理に関するところを
学習中なのですが、下記のソースを実行したときの話です。

class Exception70{
 public static void main(String[] args){
  int a = 0;
  try{
   a = Integer.parseInt( args[0] );
   System.out.println( 100 / a );
  }
  catch( Throwable err ){
   System.out.println("*** Throwable ***");
   err.printStackTrace();
   System.out.println("エラーメッセージ:" + err.getMessage());
  }
  finally{
   System.out.println("finallyブロックの処理");
  }
 }
}


上記のソースを実行してみるのですが
たまに、eclipseのコンソール内容がこのようになります。
java2014050701.jpg

TrowableクラスのprintStackTraceメソッドの表示が
本来は、例外処理を行った時点で表示されないといけないところ
printStackTraceメソッドの内容が全てコンソールに出力される前に
次のgetMessageメソッドの使用しているSystem.out.printlnメソッドの出力を行い
そして、finally文の処理をコンソールに出力されてから
残りのprintStackTraceメソッドが最後に出力されています。

ただ、このような表示が毎回行われるわけではなく
もう一度同じプログラムを実行すると、下記のような想定通りの内容が出力されます。
java2014050702.jpg

これってどういうこと??

そこでネットで調べてみると、このようなことが書かれているpdfファイルを発見しました。

<参照サイト>
Windows 上のプログ ラミング環境の整備 - お茶の水女子大学
http://itolab.is.ocha.ac.jp/~itot/lecture/WindowsEnvironment.pdf
37ページ目より抜粋
===============================================================================
実行時エラーを起こすプログラムで、全部printする前に止まってしまう

・プログラムのバグを探す際に、C言語ならprintfで、Java言語ならSystem.out.println
で、変数の中身などを表示することが多い

Eclipseのコンソールは表示が遅いので、全部表示する前に実行時エラーのほうが先に
 発生してしまうことがある

Eclipse上で実行せずに、コマンドプロンプトで実行することで、この問題は回避可能
================================================================================

今回の事象に当てはまるかは、とても微妙なのですが…。

こちらの注意書きの2行目に書かれている「Eclipseのコンソールは表示が遅いので…」というのは、このpdfファイルを作成されたeclipseを使用されていて思いたるところがあるんだろうなあと思われます。

で、この方の問題を解決する方法が3行目に書かれている
「Eclipse上で実行せずに、コマンドプロンプトで実行することで、この問題は回避可能」という一言(;・∀・)

eclipseとは開発環境であって、実行環境ではないってことなのですね…。

そうなると、まだ深く考えていなかったのですがJavaでのテスト環境ってどうすればいいのか?という疑問が浮かんできました。
まあ、それ以前にJavaのテスト方法ってどうするんだろう?
という悩みがあるわけなのですが…。
今はまだJavaのプログラミングを学習している段階で、その辺は追々考えればいいかなと考えています。

とりあえず、表題の「eclipseのコンソール画面は遅い?」についての解決策ですが
「Eclipse上で実行せずに、コマンドプロンプトで実行すること!」
ということになるようです。

今回の内容はJavaの文法的疑問点ではなく、実行環境についての疑問点という印象になりました。

とりあえず、こういう答えになりましたが、何か良い方法があれば是非ともご教授願います。

以上です。

posted by 除菌さん at 17:54 | Comment(0) | Java | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: