2

新しいスレッドを呼び出すクラスがあります。

public class MainClass{

 private void cleardata() {
                // do something on a separate thread
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //Do Something
        //After this I would like to notify my MainClass that some thing has been done and pass a value. 
        }
      }
     }
   private void callbackFunc(int a){

    // Do something based on value of a 
  }
}

MainClassに関数があります。しかし、コールバックを受け取るために、新しいスレッドからこの関数を呼び出すにはどうすればよいですか。ありがとう。

4

4 に答える 4

1

(内部クラスからではなく)それ自体のMainClass内部から直接呼び出す場合と同じように、その名前でメソッドを呼び出すことができるはずです。MainClass

呼び出したいメソッド名が、内部クラスが継承したメソッド名と競合する場合は、呼び出しの前に、たとえば呼び出しをObject付けることができますが、内部クラスインスタンスで呼び出すだけです。MainClass.thisMainClass.this.toString()toStringMainClasstoString()

于 2013-03-25T09:23:34.470 に答える
0

このような場合、MainClassのインスタンスをスレッドクラス((作成中))に渡して、そのインスタンスでメソッドを呼び出せるようにします。他の人が提案するように内部クラスを持つことも良いオプションです。

似たような-

class MainClass {

private void cleardata() {
    new Thread(new MyThread(this)).start();
}

}

クラスMyThreadはRunnable{を実装します

private MainClass mc;

MyThread(MainClass mc) {
    this.mc = mc;
}

public void run() {
    // do something
    // mc.someMethod();
}

}

于 2013-03-25T09:21:57.697 に答える
0
public class MainClass{

private void cleardata() {
        // do something on a separate thread
        new Thread(new Runnable() {
            @Override
            public void run() {
                callBackFunc(result); 
            }
        }
}

private void callBackFunc(int a) {

}
}
于 2013-03-25T09:25:11.750 に答える
0

早くやれよ:

public class MainClass{

  private void cleardata() {
            // do something on a separate thread
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //Do Something
                    notifyTheClass("a parameter");
     }
  }

  private void notifyTheClass(String aParam) {
  //..do something else
  }  
 }
}

しかし、それはスレッドとは関係ありません。これは内部クラスに関するものです。新しいスレッドが終了するまでメインスレッドを待機させる場合は、Futuresを使用して結果を取得します。または、他のマルチスレッドプリミティブを使用します。

于 2013-03-25T09:26:41.403 に答える