2011-07-16 7 views
1

もうJavaを起動しています...もう一度。 は、私はちょうど簡単なプログラムコマンドプロンプトとBlueJでコンパイルしたときの結果が異なります

class first 
{ 
    public static void main() 
    { 
     System.out.println("Hello!"); 
    } 
} 

を作ったこれはBlueJの中に完全に罰金実行されますが、コマンドプロンプトから実行したときには、実行時にエラーが発生します。

これはエラー Exception in thread "main" java.lang.NoSuchMethodError: main

である私が今までmainパラメータリスト

String args[]を与えていないので、私は無意識のうちにそれを与えるために使われています。私は、実行時に文字列配列にすべてのパラメータ値が含まれていることを知っていますが、なぜBlueJで実行されていますか?

(BlueJの学生に優しいのJavaエディタやコンパイラです)

+0

*「ありがとうございました。 .. "*、Javaは適切な名前であり、略語や頭字語(JAVAと記述されている)ではないことに注意してください。 –

+0

ああ。申し訳ありません。 – xavier666

+0

BlueJ IDEが別のバージョンのJavaを使用している可能性はありますか? – Marcelo

答えて

3

あなたのプログラムが有効であり、あなたがBlueJのまたはコマンドラインからコンパイルするかどうかを同じものにコンパイルされます。

しかし、blueJはコマンドラインでjavaコマンドが特別なmainメソッドの実行を探すような場合に、クラス内の任意の静的メソッドを実行できるようにします(関数をテストできるようになります)。この主な方法は、すべてのコマンドラインパラメータで文字列配列を検査し、これらのコマンドラインパラメータを使用しない場合でもプログラムは次のようになります。

class first 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Hello!"); 
    } 
} 
+0

私が間違っている場合は私を訂正しますが、彼らはバックエンドで同じように動作しませんか?私は、コンパイルボタンを押すと、DOSコマンドに変換されると思った... – xavier666

+0

いいえ、それは正しくありません。技術的にBlueJはクラスをコンパイルします(コマンドラインの 'java'コンパイラを使うときと同じですが)、BlueJはクラスをロードし、リフレクションを使って選択したメソッドを呼び出します。 **コマンドラインの 'java'コマンドを使用しません**。 –

+0

メソッドの名前を 'xavier'に変更することはできますが、blueJはまだそれを実行します... –

関連する問題