2

私はJavaチュートリアルを始めたばかりで、最初の演習の一環として、次のように求められました。

a)実世界のオブジェクトの新しいクラスを作成します(私は携帯電話を選択しました):mobile b)このクラスでは、その動作を定義するインターフェイスを作成し、クラスに実装を要求します。

この演習ではNetbeansを使用しました。これは、私が作成/拡張したコードです。

    package mobile;

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {

public class Mobile {
    int volume = 0;
    int ringtone = 0;

void volumeUp (int increment){
    volume = volume + increment;
}
void changeringtone (int newValue){
    ringtone = newValue;
}
void volumeDown (int decrement){
    volume = volume - decrement;
}
void printStates(){
    System.out.println("ringtone:" + ringtone + "volume:" + volume);
}

}

ただし、実行すると、次のエラーメッセージが表示されます。

java.lang.NoClassDefFoundError: mobile/Mobile (wrong name: mobile/mobile)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

メインクラス:mobile.Mobileが見つかりませんでした。プログラムは終了します。

まず、コードの間違いを指摘してください。次に、Netbeans内でこれらの問題を修正する方法を教えてください。

前もって感謝します!

カラメル

4

3 に答える 3

4

mainメソッド(任意のメソッド)はクラス内にある必要があります。パッケージとインポートの直後は、クラスである必要があります。しばらく時間をかけてJava構文を読んでください。

    public class Mobile {
    //Variables declarations 
    //Instance blocks etc.,
     public static void main(String[] args) {

//Your code here
 }

}
于 2012-07-23T20:39:07.940 に答える
2

Java 言語の問題 (メソッドはクラス本体内に存在する) に加えて、小さなアプリケーションのアーキテクチャを変更することをお勧めします。

最初にインターフェースを作成し、その後でそのインターフェースの実装を作成するよう求められます。あなたは携帯電話を選択しましたが、悪くはありませんが、あなたMobileはインターフェイスである必要があり、別のクラス (IPh**eまたはNo**a) がそのインターフェイスの実際の実装を提供する必要があります。

次に、メイン メソッドに 3 番目のクラスを使用します。名前を付けますUser- の実装のインスタンスでメソッドを呼び出すクラスですMobile

簡単に言えば:

public class Me {
  public static void main(String[] args) {
    Mobile myPhone = new Nokia();  // we "buy" a mobile
    myPhone.setVolume(11);         // that's more then 10 ;)
  }
}

public interface Mobile {
  void setVolume(int level);  // as an example
}

public class Nokia implements Mobile {
  // (1) a constructor
  // (2) implementations for all methods defined on Mobile
}
于 2012-07-23T20:57:01.743 に答える
0

この場合、クラスをテストするためのコードを書いていない限り、main() メソッドさえ必要ないかもしれません。thinksteep が提案したように、main() メソッドを Mobile クラス内に移動できます。または、コードをコンパイルするために、すべて一緒に削除することもできます。ただし、プログラムを実行するには、どこかに main() メソッドが必要であることに注意してください。

于 2012-07-23T20:45:20.793 に答える