質問

コンパイル時に無限ループに入る可能性はありますか?

プログラムをコンパイルしようとすると、無限ループに入ってしまうようです。gameRun() メソッドを呼び出すクラス コンストラクターを持つクラスがあります。gameRun() は実行の最後にそれ自体を呼び出しますが、実行時にそれを中断できるように適切なチェックが必要です...ただし、クラスをコンパイルしようとすると、実際には無限ループが発生するようです。

私の理解では、コンパイルは実際にコードを実行するわけではありません...これは、実際にコンパイラのソースに重大なバグがない限り、無限ループに入ることが不可能であることを意味します。これは正しいです?

私は Java で書いており、IDE として BlueJ (初心者用 IDE であり、成長しつつあります) を使用しています。

前もって感謝します。

.....................................

皆さん、たくさんの有益な回答をありがとうございました。この件については関心が集まっているようで、私自身も興味があるので、最新情報を投稿しようと思いました。

元のエラーを投稿して以来、BlueJ やこのエラーについてはほとんど何もしていません。プロジェクトからソース ファイルを取得し、それらを Eclipse で正常にコンパイルして実行できたためです。これは、これが BlueJ (または関連する) 問題であることを示唆しています。私はこの種の問題をこれ以上発生することなく、Eclipse を使用してこのプロジェクトに取り組み続けています。元のプロジェクトでマシンを再び使用できるようになったら、問題の詳細をフォローアップします。(それ以来何も変更されていないはずです)

.....................................

余談としては…この質問を、投稿後に作成して登録したアカウントにリンクする方法はありますか?それを行う方法が見つかりません、そして、これを追跡する方が便利になるでしょう...

役に立ちましたか?

解決

たとえば、ファイルをコンパイルするには、コンパイラーが最初にそのファイルのコンパイルを完了する必要がある場合、理論的にはそれが可能です。(ああ...再帰)。しかし、現実世界のコンパイラが最初に処理するのは、そのような狂気のチェックであると思います。

しかし、コンパイラが末尾再帰をより単純な実装に解決しようとして失敗しない限り、メソッド/関数でそれが起こるとは思いません。しかし、繰り返しになりますが、最新の Java コンパイラが存在するとしても、それが問題になるとは想像できません。確かに、コンパイラは最終的には諦めて、無限ループではなくエラーをポストするだろうと想像します。

その 遠い コンパイラよりも IDE である可能性が高くなります。推測では、IDE は警告/エラーを強調表示するためにコード内のソースまで追跡しようとしていて、トラップされている可能性があります。BlueJ にはコンパイラ エラー/警告に関するテキストの強調表示はありますか?オフにしてみてもいいでしょう。

ただし、他の多くの人がすでに提案しているように、最初の実際のテストは、次を使用してコマンドラインからコンパイルすることです。

javac *.java

またはコードで使用するファイル。

編集: 申し訳ありませんが、一度も連絡しませんでした。将来の参考のために、コマンド ラインからコンパイルするには (OS として Windows を想定しています):

  1. [スタート] メニューに移動し、[ファイル名を指定して実行...] を選択してコマンド ラインを開きます。
  2. 「実行」ダイアログに「cmd」と入力し、「OK」をクリックします。
  3. これにより、cmd.exe コンソールが表示されるはずです。
  4. ここから、「cd」コマンドを使用して、ディレクトリを Java ファイルが含まれるディレクトリに変更します。(cd "マイ ドキュメント\Java\モンスター バトル\コア")
  5. 正しいディレクトリに移動したら、「javac *.java」と入力します。これにより、IDE を処理する必要なくコンパイラが実行されます。コンパイル中に一時停止し、完了するとコマンド プロンプトに戻ります。
  6. 「javac *.java -verbose」と入力すると、無限ループが発生した場合に備えて完全な出力が得られます。

それが正常に動作する場合、それは IDE のバグです。バグレポートを送信してください。そうでない場合は、おめでとうございます!非常に興味深いものを見つけました。おそらく、貧しい Sun 開発者を 1 か月間拘束することになるでしょう。

他のヒント

一部の言語では、コンパイラが無限ループを入力することができます。 Javaは、これらの言語の一つではありません。 : - )

そうだね、コンパイラがコードを実行していない、とバグによる無限ループにのみ入力します。私は、Sunからjavacコンパイラは、このようなバグを持っていないことを確信しています。

私は、BlueJのは、「カバーの下に」使用しているものコンパイラ分かりませんが、Antはそれをコンパイルする本当にの長い時間がかかる可能javacを実行したときに、私は、問題を見てきました。簡単に言えば、Antは指定されたディレクトリの下にすべてののクラスををロードするようにコンパイラに指示する場合があります。そのディレクトリは、サードパーティのライブラリの数百人が含まれている場合は、しばらく時間がかかる...あるいはメモリが不足することができます。

あなただけの<のhref = "http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javac.html" のrel = "nofollowをnoreferrerを使用する場合は、

あなたのコンパイルは(ループ)がハングアップしてい「> javacのの?

私は、コンパイルは、Javaコンパイルしながら、無期限にハング見たことがないとBlueJのではなく、問題が発生している場合、私は思ったんだけど。

BlueJのは、独自のコンパイラを使用しない場合、

、あなたはそれで、またはそれを囲むBlueJののビルドツールにバグを発見したことがあります。

あなたはこの1に BinaryChop のアプローチを取るかもしれません:コンパイル、粉々にあなたのプログラムを破ります個別に、コンパイラ・吊り行動が小さい、特定のテストケースに単離することができるかどうかを確認します。一日の終わりには、BlueJの人々を表示するために優れたバグ報告があるでしょうか、あなたはあなたのプログラムが実際にコンパイルん(まだあなたの頭を掻くことになります)ことがわかります。

私の知る限り、標準のJavaが無限にコンパイルすることはできません。

あなたは問題がコンパイル時ではなく、BlueJのが提供する他のいくつかの機能であることを確認していますか?多くのEclipseベースのIDEが再構築中に複数のアクションを実行し、そのコンパイルはそれらの一つです。何か他のものがない可能性があります。

あなたは正確に何を見ていますか?果てしないEclipseのタスク?

あなたができるだけ小さく、コンパイルされたソースコードを作成し、まだあなたが記述挙動を示すようにしてください。そうすることのプロセスでは、あなたは問題が何であるかを識別するのに役立つことがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top