2011-03-12 22 views
-1
class TapeDeck { 

     boolean canRecord = false; 

     void playTape() { 
       System.out.println("Tape Player"); 
     } 

     void recordTape() { 
       System.out.println("Tape Recording"); 
     } 
} 

class TapeDeckTestDrive { 
     public static void main (String [] args) { 

       TapeDeck t = new TapeDeck(); 

       t.canRecord = true; 
       t.playTape(); 

       if (t.canRecord == true) { 
         t.recordTape(); 
       } 
     } 
} 

はエラーメッセージを取得、「スレッドの例外 『メイン』 java.lang.NoSuchMethodErrorの:メインの」メインクラスとしてTapeDeckTestDriveメインはありませんがメインはありますか?

+0

これ作りますコミュニティWikiの質問には、この一般的な問題の考えられる原因が記載されています:http://stackoverflow.com/questions/5407250/causes-of-java-lang-nosuchmethoderror-main-exception-in-thread-main –

答えて

3

を実行し、ないTapeDeck - と多分

1

ので、あなたのクラスが公開するあなたのクラスは公開されていません。

2

はそうのようなTapeDeckTestDriveパブリッククラスを作成します。あなたはそれを実行するために行くとき

class TapeDeck { 

    boolean canRecord = false; 

    void playTape() { 
      System.out.println("Tape Player"); 
    } 

    void recordTape() { 
      System.out.println("Tape Recording"); 
    } 
} 

public class TapeDeckTestDrive { 
    public static void main (String [] args) { 

      TapeDeck t = new TapeDeck(); 

      t.canRecord = true; 
      t.playTape(); 

      if (t.canRecord == true) { 
        t.recordTape(); 
      } 
    } 
} 

はその後、呼び出し:

java TapeDeckTestDrive 

:としてあなたがそれを実行する必要があります

java TapeDeckTestDrive 
+1

順序で公開するクラスo main()から実行します。しかし、ほとんどのツールは、Javaソース名がメインクラスを示すものと推定します。これらのクラスが両方とも 'default'で、TapeDeckTestDrive.javaであれば動作します。 –

+0

@Andrew私はそれを知らなかった。私はいつもあなたのドライバークラスを公開し、他には一度も試みたことがない "ベストプラクティス"と言われてきました。デフォルトを維持する方が良いと思われるインスタンスはありますか? –

0

TapeDeckTestDriveにはmainメソッドがあります。

あなたはmainメソッドを持たないTapeDeckクラスを実行しているようですので、エラーです。

0

TapeDeck.java

public class TapeDeck { 

    boolean canRecord = false; 

    void playTape() { 
      System.out.println("Tape Player"); 
    } 

    void recordTape() { 
      System.out.println("Tape Recording"); 
    } 
} 

TapeDeckTestDrive.java

public class TapeDeckTestDrive { 
    public static void main (String [] args) { 

      TapeDeck t = new TapeDeck(); 

      t.canRecord = true; 
      t.playTape(); 

      if (t.canRecord == true) { 
        t.recordTape(); 
      } 
    } 
} 

、より良いあなたのクラスと2つのファイルを作成し、作る >java TapeDeckTestDrive.java

0

を使用して実行公共メインメソッドを持つクラス。あなたは1つのファイルを使用して、上記の例のような場合でも、単に実行します。コマンドラインで

次のことができます。

javac FileWith2Classes //compile make you 2 files with your classes 
java TapeDeckTestDrive //and simple run your class where you have main method 
-1

はあなたのメインクラス公開

へのパブリッククラスTapeDeckTestDrive { }

+0

いいえ、**クラス**はpublicであってはいけません。メソッドのみ –

+0

publicにメソッドを入れる必要はありません。両方のクラスが同じパッケージにあるので、デフォルトメソッドはパッケージ内でアクセスできます。唯一のものは、メインメソッドを持つクラスは、public "public class TapeDeckTestDrive {}"を宣言しなければなりません。 – BoomirajP

+0

そして、それでも、実行可能にするためには、メイン宣言**を** public **宣言しておく必要があります!少なくともJava 5または6ではない。これは、私が覚えているように、Javaの初期バージョン(1.0.1; 1.1)のみに当てはまりました。JVMは、公開されているかどうかにかかわらず、ロードされたクラスにフルアクセスできます。実際には、ネストされた**プライベート**(静的)クラスでも動作します。 –

関連する問題