• ベストアンサー

JAVAコンパイルエラー全てを画面に表示したい

JAVAの初学者です。WIN98、JDKで勉強し始めています。 WINDOWのDOS画面で、JAVAC XXXX.JAVA(Enter)とコンパイルを行うと初回等には大変な数のエラーが出ます。初めの方のエラーは画面がスクロールされてしまって見えません。 皆さんはどうしておられるのでしょうか。紙に打ち出そうとしても、エラーは「標準エラー」に出力されるらしく、パイプやリダイレクト(>PRN や|MORE)が効かないようです。紙に打ち出す方法でもいいです。教えてください。 またエラーのある行番号数の表示が出ますが、コンパイルに差し障らないように、ソースに行番号数を一時的に画面表示だけ振る方法・エディターなどは有るのでしょうか。C言語の勉強でも同じとおもいます。 以前に、他の方が同じ質問をされていて回答がありましたが、その通りしても上手く行きません。初級の解説書もJDKのことは書いても、上記のことを書いた本は(10冊程度しか読んでいませんが)、全くありません。今日も「JAVAの勉強を始めるにはどうすれば良いか」とOK-WEBに質問があり、JDKで勉強しろとアドバイスがありますが、すぐ上記の疑問にぶつかると思います。

  • Java
  • 回答数6
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • syunpon
  • ベストアンサー率42% (9/21)
回答No.4

確かにDOSプロンプトのエラー表示には頭を悩ませますね。。(^^; これは他の方がおっしゃられているようにエラー表示が標準エラー出力に出力されている為です。 で、私は別の切り口から。。無い物は作ってしまいましょう作戦 つうわけで標準エラー出力を標準出力に切り替えてしまうプログラムを作ってしまいましょう。 下は簡単なサンプルです。 import java.io.*; public class ExecTest { public static void main(String args[]){ if (args.length == 0 ) { System.out.println("Usage:java ExecTest command [args1 [args2][...]]"); System.exit(0); } String cmd[] = args; try { Process prc = Runtime.getRuntime().exec(cmd); InputStream is = prc.getErrorStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while((line = br.readLine()) != null){ System.out.println(line); } prc.destroy(); } catch(Exception e) { e.printStackTrace(); } } } 上のプログラムをExecTest.javaとして保存後コンパイルして DOSプロンプトより >java ExecTest javac programfile とすればOKなはずです。 programfileのところにはエラーのあるファイルを入れてください。 見た目は同じですが標準出力にエラーが出力されてますので|more も効くはずです。 一応JDK1.3の環境で実験済みなんで大丈夫だと思います。 では。。(^^;

その他の回答 (5)

  • soakun
  • ベストアンサー率66% (6/9)
回答No.6

前者について URLを参照してみてください。

参考URL:
http://www.gimlay.org/~javafaq/S003.html#S003-06
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.5

http://oshiete1.goo.ne.jp/kotaeru.php3?q=135663 に以前に出た同様の質問があります。 >エラーの指摘が7件なのですが、SDK 1.3.1 で javac GDraw.java では25件エラー指摘が出ます。 についてですが、oldjavacは名前からみる限り以前のverのJava Compilerなんではないでしょうか? Javaは結構な頻度でバージョンアップをしており、クラスライブラリの位置変更/仕様変更をはじめ、少なからず言語仕様の変更などもなされているはずです。その違いから同じソースコードでもバージョンの違うCompilerにかければエラー結果は変わってきます。(一般的に言語仕様が明確、詳細になるため新しいVerのものを使うとエラーやワーニングの量は増えると思われます) 行番号に関しては多くのプログラム向けエディタでサポートされています。 行番号の問題を省いても予約語の強調表示やCompilerの呼び出し、エラー/ワーニングの該当位置へのジャンプなどの機能を持つものもありますのでご自身の手になじむエディタを探してみるのもいいかもしれません。 もしくは統合環境を用意するのもひとつの手です。 現在では無料で使用できる統合環境もあります。上記の機能も統合環境であれば当然のように持っていますし、ものによってはCompilerとして組み込みのものではなくJDK付属のjavacが使えるものもあります。

noname#3852
noname#3852
回答No.3

imogasiさん、こんにちは。 確かにJAVA2 SDK(JDK)のコンパイラのメッセージは不親切ですね。 他の方を示されているように、いろいろな手法があるようですが、OSやJAVA2の問題で、あまり満足のいく方法ではないですかね。個人的には、PCを買えばライセンス込みでバンドルされるOSに、無償で得られるSDKでは、ある程度我慢せざる得ないのかなと思っています。なので多量のエラーが発生したときは、自分で対処するしかないのかのと思っています。 私は、数百行、数千行あるプログラムソースの大部分を/* と */ で囲んでコメントにしておいて、コンパイルエラーにならないところまでに一旦しておき、コメントに少しずつ解除して、エラーの発生箇所を少しずつなくす方法をとっています(いました)。 経験上、多量に出ているコンパイルエラーも、1箇所の記述ミスを直すだけで数個から数十個解消されることが多いです。記述ミスつまりプログラマのケアレスミスですね。 そんな風に悪戦苦闘して経験を積めば、「多量エラーで悩む」前に「エラーの発生を未然に防ぐ」ことができると思います。初心者の方にはきついことかもしれませんし、遠回りのように思えるかもしれませんが、真の解決の早道になると思っています。  また、行番号に関連しますが、私は「秀丸」を利用しています。「秀丸」含め多くのプログラマ愛用エディタがシェアウェア(秀丸は4000円+諸費用)なので躊躇すると思います。なので、こればかりは、「(以下のVectorなど)Webサイトや雑誌付録から、フリー/シェアのエディタを取得して試して見てください」と言うしかないありません。 以上、参考になりましたでしょうか。

参考URL:
http://www.vector.co.jp/vpack/filearea/win/writing/edit/index.html
  • arata
  • ベストアンサー率49% (139/279)
回答No.2

finalanswerさんの紹介された方法は、Java2以降では使えないと思います。 oldjavacを使用する方法を紹介しておきます。 oldjavac -Xstdout sample.java > result.txt -Xstdoutを指定するとエラー出力が標準出力に変更されます。 なお、Windows2000の場合は、 javac sample.java 2> result.txt のように 2> でリダイレクトするとエラー出力がリダイレクトされますので、oldjavacを使用しなくてもOKです。

imogasi
質問者

お礼

早速ご回答有難うございました。 私の場合>oldjavac -Xstdout GDraw.java > result.txt で、result.txt が出来ました。しかしエラーの指摘が7 件なのですが、SDK 1.3.1 で javac GDraw.java では 25件エラー指摘が出ます。この違いはどうして出るのか、ご存知でしたら、教えてください。

回答No.1

DOSプロンプトで、Javaのコンパイル時に表示されるメッセージは、以下のようなコマンドで取得できます。 (sample.javaをコンパイルしてresult.txtに出力する場合) javac -J-Djavac.pipe.output=true sample.java > result.txt Javaに関するよくある質問とその回答集を参考URLとして挙げておきます。

参考URL:
http://www.gimlay.org/~javafaq/javafaq.html
imogasi
質問者

お礼

直ちにご回答に接し、やって見ました。誠に有難うございました。但しエラー指摘は、画面に出て、表示は流れて出てしまい、result.txtは空です。さらに何か教えて頂ける ことがありましたら、よろしくお願いします。

関連するQ&A

  • java  コンパイルできない

    os:WindowsXP pro jdkをインストールし メモ帳でsample.javaという名前の サンプルファイルを作り コマンドプロントで javac sample.javaと入力し コンパイルしたのですが エラー:sample.javaが読み込めません エラー 1個 と出力され、コンパイルできませんでした。 過去ログを拝見したところ、 フォルダオプションの設定で、拡張子を表示し javaファイルか確認をする ということでしたので、拡張子の表示をし、 javaのソースファイルであることは確認しました。 ただ、画面に表示されているファイルはJ#になっています。 visualbasicをインストールしているため、 javaファイルはJ#になってしまうようです。 環境変数のpathはC:\Program Files\Java\jdk1.5.0\binに設定しました。 コンパイルできるようにするために どうかご教授していただければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのコンパイル(javac)

    初歩的なことを質問します。 Javaを勉強するためにJDKをインストールしました。 その後、練習ソースを記述しコマンドプロンプトでコンパイルをしたところ、 「'javac'は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されてません」 とエラーが帰ってきました。 どうやったらコンパイルできるようになるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • java にてコンパイルできない。

    java にてコンパイルできない。 javaにてコンパイルそのものができません。 下記がその状況です。 java>javac test.java Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac C:\java>set JAVA_HOME JAVA_HOME=C:\Program Files\Java\jdk1.5.0 ネットで調べてコンパネの環境設定でPATH、CLASSPATHの設定等は変更しました。 現在のところ上記の設定はJAVAのものしか入っておりません。 他のPCでは正常にコンパイル実行できますので文法の間違いはないものと思われます 何か考えられることはありますでしょうか

  • javaの簡単なソースがコンパイル出来ません

    Javaを始めてみましたが、最も簡単なjavaのソースがどうしてもコンパイル出来ません。 どうしたらいいのか教えて下さい。 デスクトップの以下の Hello.java に対して、 public class Hello { public static void main(String[] args) { System.out.println("Hello,World"); } } 以下の3通りの方法でコンパイルを掛けてみると、 ‥デスクトップ>javac Hello.java javac:ファイルが見つかりません:Hello.java 使い方:javac <ptions> <source files> 使用可能なオプションのリストについては-helpを使用します >javac Hello.java.txt エラー:クラス名 ‘Hello.java.txt’が受け入れられるのは、注釈処理が明示的に要求された場合だけです エラー1個 >javac Hello エラー:クラス名 ‘Hello’が受け入れられるのは、注釈処理が明示的に要求された場合だけです エラー1個 でどの場合もコンパイルされません。 なお、javaのバージョンは “1.6.0_06”で、パスも C:\Program Files\Java\jdk1.6.0_06\bin\; と設定してあります。 どうしたらコンパイルが出来るのか、教えて下さい。

    • ベストアンサー
    • Java
  • javaのコンパイルについて

    JDK(Javaコンパイラ)をインストールしましたか? インストールしたら、環境変数PATHにjavacのあるパスを追加する必要があります。 といってもらいコンパイラをしようとしていますところです しかし環境変数pathに javacをついかする方法が解りません 詳しく教えていただけないでしょうか? 質問はfirstjava.javaをコンパイルしjavac firstjava.classでdirで表示したいのです よろしくお願い致します

  • JAVAについて。コンパイルができません

    public class Main { public static void main(String[] args){ System.out.println("Hello World"); } } 上のソースで記述して、コマンドプロンプトでコンパイルしようとすると 下のような表示が起きます C:\Program Files\Java\jdk-12.0.1\bin>javac Main.java Main.java:1 エラー: Mainの書き込み中にエラーが発生しました: C:\Program Files\Java\ jdk-12.0.1\bin\Main.class public class Main { ^ エラー1個 何が原因でコンパイルされないかわからないです。 わかるかたいましたらよろしくお願いします。

  • NTEmacsでJavaのコンパイルをしたいです

    NTEmacsのシェルです。 Javaの勉強をつい最近始めました。JDKは入っていて、普段はjavac、javaは普通に動くのですが、import java.io.*;のようなことをすると、(パーケージを読みこませる等)その部分でエラーになってしまいます。 ただ、eclipseで同様のものを作ると、コンパイルはうまくいきます。 例 import java.io.*; class Sample4{ public static void main(String[] args) throws Exception { System.out.println("please imput something"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str); } } 結果 c:\Users\***\Documents\Java>javac no_3.java javac no_3.java no_3.java:33: エラー: class、interfaceまたはenumがありません import java.io.*; ^ エラー1個

    • ベストアンサー
    • Java
  • java コンパイルエラー

    java コンパイルエラー java 初心者です。 簡単なプログラムを作りながら練習していたのですが、Exceptionクラスを継承して新しい例外を作る以下のプログラムで、コンパイルエラーとなり、解決できません。 class NewException extends Exception{ public NewException(){ super("エラー"); } } これを javac でコンパイルすると、 NewException.java:3: シンボルを見つけられません。 シンボル: コンストラクタ Exception(java.lang.String) 場所  : Exception の クラス super("エラー"); ^ エラー1個 と言われます。 これを読むと「Exception には String を引数にとるコンストラクタはないよ」と言われているように思えるのですが、そんなはずないのでは。。 もし原因がお分かりの方がいらしたら、ご教示いただけるとありがたいです。

    • ベストアンサー
    • Java
  • コンパイルができなくて悩んでいます!!!

    先程、サンマイクロシステム社のホームページから、jdk1.5.0_02のJDKをダウンロードしてインストールしたのですが、どうしてもコンパイルできません。 "MyJava.java"というデータを作成したフォルダに行き"javac MyJava.java"とコンパイルすると、 画面には Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/Main と表示されます。。。何回してもこのメッセージが出るのですが、私全くの初心者でどういう意味なのかわかりません。本当に困っています、なぜコンパイルが出来ないのか、また解決方法を教えてください。どうかお願いします。

    • ベストアンサー
    • Java
  • javaのコンパイルエラー!!jarを探しています(*_*;

    javaのコンパイルエラー!!jarを探しています(*_*; eclipse ver 3.3.1.1 java ver 1.6 jdk1.6 antでビルドをかけています。 ※上記の環境 でも weblogicのタスクで com/bea/xbean/common/concurrentreaderhashmap のクラスが見つかりません って怒られます。 このパスでこのクラスを持った jarを知ってる方いらっしゃいましたら 教えてください。 もう かなり探してるんですけど… 見つかりませんでした(*_*) まぢで困ってます よろしくお願いしますm(__)m

専門家に質問してみよう