0

wait()とnotify()は静的ではないため、コンパイラーは、待機を静的コンテキストから呼び出す必要があるというエラーを出す必要があります。

public class Rolls {
  public static void main(String args[]) {
    synchronized(args) {
        try {
            wait();
        } catch(InterruptedException e)
        { System.out.println(e); }
    }
  }
}

ただし、次のコードは正しくコンパイルおよび実行されます。コンパイラがここでエラーを出さないのはなぜですか?あるいは、コンパイラが前のコードで、静的コンテキストから呼び出す必要があるというエラーを出すのはなぜですか?

public class World implements Runnable {
  public synchronized void run() {
    if(Thread.currentThread().getName().equals("F")) {
        try {
            System.out.println("waiting");
            wait();
            System.out.println("done");
        } catch(InterruptedException e) 
        { System.out.println(e); }
    }
    else {
        System.out.println("other");
        notify();
        System.out.println("notified");
    }
  }
  public static void main(String []args){
    System.out.println("Hello World");
    World w = new World();
    Thread t1 = new Thread(w, "F");
    Thread t2 = new Thread(w);
    t1.start();
    t2.start();
  }
} 
4

2 に答える 2

5

public synchronized void run()定義上静的ではないインスタンスメソッド()からwaitとnotifyを呼び出しています。

  • 静的なメソッド内でwaitを呼び出すとmain、予期したエラーが発生します。
  • または、メソッドのシグネチャをに変更することもできpublic static synchronized void run()ますが、Runnableを実装していないという別のコンパイルエラーも発生します。
于 2013-01-17T10:46:38.407 に答える
0

コンパイラは、待機を静的コンテキストから呼び出す必要があるというエラーをいつ生成しますか

エラーメッセージは、メソッドが静的コンテキストから呼び出されてはならないということです。staticインスタンスのないメソッドで使用しようとすると、このエラーが発生します。

于 2013-01-17T10:53:16.370 に答える