2

スレッド完了を処理するクラスに問題があります。2番目のスレッドを開始できるように、細かく分割された他のスレッドに通知する必要があります。これが私のプロジェクト構造です。

MainClass.java

public class MainClass implements ThreadCompleteListener {

public void main(String[] args) throws InterruptedException {

    NotifyingThread test = new Thread1();
    test.addListener((ThreadCompleteListener) this); 
    test.start();         

}

@Override
public void notifyOfThreadComplete(Thread thread) {
    // TODO Auto-generated method stub

}   

}

クラス-Thread1.java

public class Thread1 extends NotifyingThread {

@Override
public void doRun() {
    try {
        metoda();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public static synchronized void metoda() throws InterruptedException {
    for(int i = 0; i <= 3; i++) {
        Thread.sleep(500);
        System.out.println("method in Thread1");
    }
}

public void notifyOfThreadComplete(Thread thread) {
    // TODO Auto-generated method stub

}
}

NotifyingThread.java

import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

public abstract class NotifyingThread extends Thread {
  private final Set<ThreadCompleteListener> listeners = new  CopyOnWriteArraySet<ThreadCompleteListener>();
  public final void addListener(final ThreadCompleteListener listener) {
    listeners.add(listener);
  }

  public final void removeListener(final ThreadCompleteListener listener) {
    listeners.remove(listener);
  }

  private final void notifyListeners() {
    for (ThreadCompleteListener listener : listeners) {
      listener.notifyOfThreadComplete(this);
    }
  }

  @Override
  public final void run() {
    try {
      doRun();
    } finally {
      notifyListeners();
    }
  }

  public abstract void doRun();
}

ThreadCompleteListener.java

public interface ThreadCompleteListener {
void notifyOfThreadComplete(final Thread thread);
}

私が直面している問題は、MainClassを実行すると、次のようなエラーが発生することです。致命的な例外が発生しました。プログラムが終了し、コンソールに次のように表示されます。

java.lang.NoSuchMethodError:mainスレッド"main"の例外

誰かがこれを1つの作業の平和で得るのを手伝ったり、コードで私が間違っていることを教えてもらえますか?

アドバイスありがとうございます!

4

2 に答える 2

7

public void main を置き換える

public void mainstatic

于 2012-06-22T10:24:22.173 に答える
2

交換する必要があると思います:

public void main(String[] args)

為に

public static void main(String[] args)
于 2012-06-22T10:27:01.060 に答える