2012-02-05 9 views
4

間で異なる振る舞い、私は単一のファイルにこのコードを持っている:奇妙なとNetBeans、Eclipseとコンパイラ

public class genIntro { 
    public static void main(String [] args){ 
    genTest g = new genTest(); 
    g.add(10); 
    System.out.println(g.get() == new Integer(10) ? true:false ); 
    Integer in = (Integer) g.get(); 


    } 
} 

class genTest(){ 

     private Object object; 

     public void add(Object object) { 
      this.object = object; 
     } 

     public Object get() { 
      return object; 
     } 


} 

第二のクラスgenTestはカッコ()と見間違った宣言を持っています。

Netbeans 6.9.1では、コードが正しく実行され、falseが出力されます。 Eclipseのインディゴで

Product Version: NetBeans IDE 6.9.1 (Build 201007282301) 
Java: 1.6.0_21; Java HotSpot(TM) 64-Bit Server VM 17.0-b17 
System: Windows 7 version 6.1 running on amd64; Cp1252; en_US (nb) 
Userdir: C:\Users\Name\.netbeans\6.9 

コード出力:手動その後

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

    at genIntro.main(genIntro.java:4) 

Version: Indigo Service Release 1 
Build id: 20110916-0149 

私が手javacコマンドでコンパイル:、

genIntro.java:12: '{' expected 
    class genTest(){ 
     ^
    1 error 

これはかなり奇妙であることができます誰かがなぜディそれらの間のfference?それは間違っているので、Netbeansでコンパイルして実行するのはなぜですか? javac genIntro.java

経由で実行

彼らはすべて使用JRE6

スクリーンショット:

enter image description here

+1

'g.get()==新しい整数(10)?真:偽」は少し冗長なようだ。 –

+1

コンパイルに使用している正確なコマンドを含めてください。 –

+0

@DaveNewton編集。 – Mob

答えて

2

私は、コマンドラインとNetBeans 7.1のjavac 7でそれを試みたが、それが与えますあなたの両方のjavacの例と同じエラーです。 netbeansのバージョンでソースが同じであると確信していますか?私はそれがまったくどのようにコンパイルされるのか分かりません。

"class genTest(){"を "class genTest {"に変更するとコンパイルが許可され、 "false"が出力されます。

+0

私はなぜ彼らがまったくコンパイルするのか分からないので、私はこれを求めています。 – Mob

+1

申し訳ありませんが、私はあなたのポイントを見て、特に以下の他の答えを読んだ後。これは 'Save on Save'に接続されているようですが、私が理解できる限り、完全なjavacコンパイラではなく、特別な内部コンパイラを使用しています。内部コンパイラはいくつかのエラーを '修正する'か、または動作するように見えるので、コンパイルエラーを含むコードを実行することができます。これに関する興味深いFAQは、netbeans wiki(http://wiki.netbeans.org/FaqCompileOnSave)にあります。これについては、どのように動作するかについて詳しく説明しています。 – SteveB

+0

それだけです。ありがとう – Mob

1

実際これは奇妙な動作です。 Netbeans(7.0.1)で新しいプロジェクトを作成し、genIntro.javaファイルにコードを追加しました。いくつかの所見:

  1. IDEが初めてエラーが存在するユーザを促し実行]を選択してコード
  2. の構文エラーを強調表示しません。あなたはこれを永久に無視することを選択することができます。
  3. プロジェクトをビルドし、あなたが実際に誤ったソースの生成されたクラスファイルを見つけることができますプロジェクトのbinフォルダに成功し
  4. 実行するために表示される構文エラーを無視することを選択した場合。このクラスを逆コンパイルすると、構文エラーが削除されたことがわかります
  5. 戻るIDEで
  6. 、クリーンを実行し、ビルドします(ファイル名を指定して実行ではなく)予想されるエラーを生成します:
 
Compiling 2 source files to /Users/tuoyo/Work/Data/Netbeans/Misc/build/classes 
/Users/tuoyo/Work/Data/Netbeans/Misc/src/misc/genIntro.java:14: '{' expected 
class genTest(){ 
1 error 
/Users/tuoyo/Work/Data/Netbeans/Misc/nbproject/build-impl.xml:603: The following error occurred while executing this line: 
/Users/tuoyo/Work/Data/Netbeans/Misc/nbproject/build-impl.xml:245: Compile failed; see the compiler error output for details. 
BUILD FAILED (total time: 0 seconds) 

クリーンとビルドが、私はそれを使用していると仮定舞台裏Antスクリプトを起動しますので、コンソールモードのシステムJDKです。これは、元々の観測結果を揺さぶるでしょう。NetBeansが実行を選択したときにNetBeansがどのようにコードをコンパイルしているのかという疑問が残っています。実行パスが異なるようです。

関連する問題