0
public class Signal2NoiseRatio
{
    public ImagePlus SingleSNR(ImagePlus imagePlus) throws InterruptedException
    {

        new Thread()
        { 
          @Override public void run() 
          { 
              for (int i = 0; i <= 1; i++)
              { 
                  System.out.println("in queue"+i);
              }

              synchronized( this ) 
              { 
                  this.notify(); 
              }
            } 
        }.start();


        synchronized (this) 
        {
        this.wait();
        }


        return imagePlusToProcess;
    }
}

notify()に達しませんwait()

ここで何が問題なのですか?

この1つのメソッドの両方の同期されたメソッドが実装されていることが私にとって不可欠です。

メインスレッドは、その中に画像を表示するフレームを実行します。wait()この方法でフレームが白いウィンドウにつながる可能性はありますか?

4

2 に答える 2

2

thisSingleSNRメソッドthis内とオーバーライドされたrunメソッド内は同じオブジェクトではありません(内部runthisは、の匿名サブクラスを参照しThreadます)。同じオブジェクトに通知していることを確認する必要がありますwait。これは次のように利用できますSignal2NoiseRatio.this

      @Override public void run() 
      { 
          for (int i = 0; i <= 1; i++)
          { 
              System.out.println("in queue"+i);
          }

          synchronized( Signal2NoiseRatio.this ) 
          { 
              Signal2NoiseRatio.this.notify(); 
          }
        } 
于 2012-08-14T11:01:00.587 に答える
0

2つの「これ」は同じではありません。1つはSignal2NoiseRatioで、もう1つはスレッドです。

于 2012-08-14T11:01:16.527 に答える